为类似的函数绘制简单曲线的替代方法是什么
eq = function(x){x*x}
在 R?
这听起来是一个很明显的问题,但是我只能找到这些关于堆栈溢出的相关问题,但是它们都更加具体
我希望我没有写一个重复的问题。
You mean like this?
> eq = function(x){x*x} > plot(eq(1:1000), type='l')
(Or whatever range of values is relevant to your function)
plot has a plot.function method
plot
plot.function
plot(eq, 1, 1000)
Or
curve(eq, 1, 1000)
I did some searching on the web, and this are some ways that I found:
The easiest way is using curve without predefined function
curve(x^2, from=1, to=50, , xlab="x", ylab="y")
You can also use curve when you have a predfined function
eq = function(x){x*x} curve(eq, from=1, to=50, xlab="x", ylab="y")
If you want to use ggplot,
library("ggplot2") eq = function(x){x*x} ggplot(data.frame(x=c(1, 50)), aes(x=x)) + stat_function(fun=eq)
Here is a lattice version:
library(lattice) eq<-function(x) {x*x} X<-1:1000 xyplot(eq(X)~X,type="l")
Lattice solution with additional settings which I needed:
library(lattice) distribution<-function(x) {2^(-x*2)} X<-seq(0,10,0.00001) xyplot(distribution(X)~X,type="l", col = rgb(red = 255, green = 90, blue = 0, maxColorValue = 255), cex.lab = 3.5, cex.axis = 3.5, lwd=2 )
X<-seq(0,10,0.00001)
col = rgb(red = 255, green = 90, blue = 0, maxColorValue = 255)
lwd = 2
cex.lab = 3.5, cex.axis = 3.5
As sjdh also mentioned, ggplot2 comes to the rescue. A more intuitive way without making a dummy data set is to use xlim:
library(ggplot2) eq <- function(x){sin(x)} base <- ggplot() + xlim(0, 30) base + geom_function(fun=eq)
Additionally, for a smoother graph we can set the number of points over which the graph is interpolated using n:
base + geom_function(fun=eq, n=10000)
I had a function (emax()) involving 3 parameters (a, b & h) whose line I wanted to plot:
emax()
emax = function(x, a, b, h){ (a * x^h)/(b + x^h) } curve(emax, from = 1, to = 40, n=40 a = 1, b = 2, h = 3)
which errored with Error in emax(x) : argument "a" is missing, with no default error.
Error in emax(x) : argument "a" is missing, with no default error
This is fixed by putting the named arguments within the function using this syntax:
curve(emax(x, a = 1, b = 2, h = 3), from = 1, to = 40, n = 40)
which is contrary to the documentation which writes curve(expr, from, to, n, ...) rather than curve(expr(x,...), from, to, n).