如何在R中绘制功能曲线


71

为像这样的函数绘制简单曲线有哪些选择

eq = function(x){x*x}

在R?

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

希望我不要写重复的问题。

Answers:


45

你的意思是这样吗?

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

eq超出范围1:1000的图

(或者任何与您的功能相关的值范围)


85

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

最简单的方法是使用不带预定义功能的曲线

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

在此处输入图片说明

当您有预先定义的功能时,也可以使用曲线

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)

在此处输入图片说明


3
仅供参考,qplot示例不再起作用:为了鼓励用户使用ggplot(),该qplot()函数被削弱了-例如,它不再接受该fun参数(从v3开始)?
tim

33

plot有一种plot.function方法

plot(eq, 1, 1000)

要么

curve(eq, 1, 1000)

1
有趣的是,我plot(eq, 1, 1000)在其他任何地方都没有看到您的示例。我也看到了curve(eq, 1, 100)例子。有区别吗?
sjdh 2014年

4
@sjdh不多。在进行一些参数检查后plot.function实际调用curve。另外,curve可以将表达式作为输入,但plot需要一个函数作为输入以分派给plot.function
GSee

1

这是点阵版本:

library(lattice)
eq<-function(x) {x*x}
X<-1:1000
xyplot(eq(X)~X,type="l")

晶格输出


1

我需要额外设置的莱迪思解决方案:

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 <-seq(0,10,0.00001)

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

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

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

lwd = 2

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

cex.lab = 3.5,cex.axis = 3.5

样例图


0

正如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)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.