如何在 R 中绘制函数曲线

How to plot a function curve in R

提问人:sjdh 提问时间:9/29/2014 最后编辑:Gregor Thomassjdh 更新时间:5/25/2022 访问量:246512

问:

为像这样的函数绘制简单曲线的替代方案是什么

eq = function(x){x*x}

在 R 中?

这听起来是一个显而易见的问题,但我只能在 stackoverflow 上找到这些相关问题,但它们都更具体

我希望我没有写重复的问题。

GGPLOT2 绘图 晶格 R-FAQ

答:

52赞 Eric 9/29/2014 #1

你是说这样?

> eq = function(x){x*x}
> plot(eq(1:1000), type='l')

Plot of eq over range 1:1000

(或与您的函数相关的任何值范围)

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.functioncurvecurveplotplot.function
116赞 sjdh 9/29/2014 #3

我在网上做了一些搜索,这是我找到的一些方法:

最简单的方法是使用没有预定义函数的曲线

curve(x^2, from=1, to=50, , xlab="x", ylab="y")

enter image description here

当您具有 predfined 函数时,也可以使用 curve

eq = function(x){x*x}
curve(eq, from=1, to=50, xlab="x", ylab="y")

enter image description here

如果你想使用 ggplot,

library("ggplot2")
eq = function(x){x*x}
ggplot(data.frame(x=c(1, 50)), aes(x=x)) + 
  stat_function(fun=eq)

enter image description here

评论

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")

Lattice output

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. 如果您需要以不同于 1 的增量绘制 x 的值范围,例如 0.00001,您可以使用:

X<-序列(0,10,0.00001)

  1. 您可以通过定义 rgb 值来更改线条的颜色:

col = rgb(红色 = 255,绿色 = 90,蓝色 = 0,maxColorValue = 255)

  1. 您可以通过设置来更改绘制线的宽度:

长宽 = 2

  1. 您可以通过缩放标签来更改标签的大小:

cex.lab = 3.5,cex.axis = 3.5

Example plot

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 方式,以允许在编程中具有更大的灵活性) - 请参阅。在这里,文档甚至指定了 - 这清楚地表明它与表达式无关。我认为在这种情况下,这个文档非常清楚。?curveFor the "function" method of plot, ... can include any of the other arguments of curve, except expr.
0赞 tjebo 5/28/2022
P.S. 我假设您的混淆来自其他函数,您可以在其中使用(例如,lapply)向函数添加其他参数。然而,这只是它们的设计方式,并且在每种情况下都扮演不同的角色,具体取决于底层功能设计。此外,方法通常是函数的特例,有时甚至可以包含根本没有意义的方法。因此,如果您不完全知道它对该功能的作用,我通常会避免盲目使用。............