【问题标题】:How to plot a function curve in R如何在 R 中绘制函数曲线
【发布时间】:2021-07-05 09:50:12
【问题描述】:

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

eq = function(x){x*x}

在R中?

听起来很明显的问题,但我只能在stackoverflow上找到这些相关的问题,但都比较具体

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

【问题讨论】:

    标签: r ggplot2 plot lattice r-faq


    【解决方案1】:

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

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

    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)
    

    【讨论】:

    • 仅供参考,qplot 示例不再有效:为了鼓励用户使用 ggplot()qplot() 函数已被削弱 - 例如,它不再接受 fun 参数(截至v3?)
    【解决方案2】:

    你的意思是这样的?

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

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

    【讨论】:

      【解决方案3】:

      plot 有一个plot.function 方法

      plot(eq, 1, 1000)
      

      或者

      curve(eq, 1, 1000)
      

      【讨论】:

      • 有趣,我没有在其他任何地方看到您的示例plot(eq, 1, 1000)。我还看到了curve(eq, 1, 100) 示例。有区别吗?
      • @sjdh 不多。 plot.function 在做一些参数检查后实际上调用了curve。此外,curve 可以将表达式作为输入,但 plot 需要一个函数作为输入才能调度到 plot.function
      【解决方案4】:

      这是一个格子版本:

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

      【讨论】:

        【解决方案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

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

        col = rgb(red = 255, green = 90, blue = 0, maxColorValue = 255)

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

        lwd = 2

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

        cex.lab = 3.5,cex.axis = 3.5

        【讨论】:

          【解决方案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)
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-02-21
            • 2015-09-25
            • 1970-01-01
            • 2016-11-29
            • 1970-01-01
            • 1970-01-01
            • 2020-04-03
            相关资源
            最近更新 更多