提问人:sjdh 提问时间:9/29/2014 最后编辑:Gregor Thomassjdh 更新时间:5/25/2022 访问量:246512
如何在 R 中绘制函数曲线
How to plot a function curve in R
问:
为像这样的函数绘制简单曲线的替代方案是什么
eq = function(x){x*x}
在 R 中?
这听起来是一个显而易见的问题,但我只能在 stackoverflow 上找到这些相关问题,但它们都更具体
我希望我没有写重复的问题。
答:
52赞
Eric
9/29/2014
#1
你是说这样?
> eq = function(x){x*x}
> plot(eq(1:1000), type='l')
(或与您的函数相关的任何值范围)
37赞
GSee
9/29/2014
#2
plot
有方法plot.function
plot(eq, 1, 1000)
或
curve(eq, 1, 1000)
评论
1赞
sjdh
9/29/2014
有趣的是,我在其他任何地方都没有看到你的例子。我也看到了这个例子。有区别吗?plot(eq, 1, 1000)
curve(eq, 1, 100)
4赞
GSee
9/29/2014
@sjdh 不多。 实际上是在进行一些参数检查后调用的。此外,可以将表达式作为输入,但需要函数作为输入才能调度到plot.function
curve
curve
plot
plot.function
116赞
sjdh
9/29/2014
#3
我在网上做了一些搜索,这是我找到的一些方法:
最简单的方法是使用没有预定义函数的曲线
curve(x^2, from=1, to=50, , xlab="x", ylab="y")
当您具有 predfined 函数时,也可以使用 curve
eq = function(x){x*x}
curve(eq, from=1, to=50, xlab="x", ylab="y")
如果你想使用 ggplot,
library("ggplot2")
eq = function(x){x*x}
ggplot(data.frame(x=c(1, 50)), aes(x=x)) +
stat_function(fun=eq)
评论
4赞
tim
6/20/2019
仅供参考 qplot 示例不再有效:为了鼓励用户使用 ,该函数被削弱了 - 因此,例如,它不再接受参数(从 v3 开始?ggplot()
qplot()
fun
2赞
John Paul
9/29/2014
#4
下面是一个晶格版本:
library(lattice)
eq<-function(x) {x*x}
X<-1:1000
xyplot(eq(X)~X,type="l")
2赞
mrk
4/5/2017
#5
具有我需要的其他设置的晶格解决方案:
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 )
- 如果您需要以不同于 1 的增量绘制 x 的值范围,例如 0.00001,您可以使用:
X<-序列(0,10,0.00001)
- 您可以通过定义 rgb 值来更改线条的颜色:
col = rgb(红色 = 255,绿色 = 90,蓝色 = 0,maxColorValue = 255)
- 您可以通过设置来更改绘制线的宽度:
长宽 = 2
- 您可以通过缩放标签来更改标签的大小:
cex.lab = 3.5,cex.axis = 3.5
2赞
Mikkel Roald-Arbøl
9/29/2020
#6
正如 sjdh 所提到的,ggplot2 来救援。在不制作虚拟数据集的情况下,一种更直观的方法是使用 xlim:
library(ggplot2)
eq <- function(x){sin(x)}
base <- ggplot() + xlim(0, 30)
base + geom_function(fun=eq)
此外,对于更平滑的图形,我们可以使用 n 设置图形插值的点数:
base + geom_function(fun=eq, n=10000)
0赞
Timothy M Pollington
5/25/2022
#7
包含参数的函数
我有一个函数 () 涉及 3 个参数(a、b 和 h),我想绘制它们的线: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)
其中错误为 。Error in emax(x) : argument "a" is missing, with no default error
通过使用以下语法将命名参数放在函数中,可以解决此问题:
curve(emax(x, a = 1, b = 2, h = 3), from = 1, to = 40, n = 40)
这与编写 curve(expr, from, to, n, ...) 而不是 curve(expr(x,...), from, to, n) 的文档相反。
评论
0赞
tjebo
5/25/2022
这与文档并不矛盾。expr 只是这个参数的名称,而不是一个函数本身。它被定义为函数的名称,或调用或写为 x 函数的表达式,其计算结果为与 x 长度相同的对象。 这意味着,如果您不仅有函数的名称,它将把整个参数计算为表达式。
0赞
Timothy M Pollington
5/28/2022
嗨,@tjebo我同意 expr 参数是正确的,但是他们是如何写出“......”在语法中,Curve(expr=fun,...) 也有效,但事实并非如此。curve(expr=fun(x,...)) 似乎是唯一的方法。
0赞
tjebo
5/28/2022
不。这。。。用于“绘图的函数方法”(这只是 R 方式,以允许在编程中具有更大的灵活性) - 请参阅。在这里,文档甚至指定了 - 这清楚地表明它与表达式无关。我认为在这种情况下,这个文档非常清楚。?curve
For the "function" method of plot, ... can include any of the other arguments of curve, except expr.
0赞
tjebo
5/28/2022
P.S. 我假设您的混淆来自其他函数,您可以在其中使用(例如,lapply)向函数添加其他参数。然而,这只是它们的设计方式,并且在每种情况下都扮演不同的角色,具体取决于底层功能设计。此外,方法通常是函数的特例,有时甚至可以包含根本没有意义的方法。因此,如果您不完全知道它对该功能的作用,我通常会避免盲目使用。...
...
...
...
评论