【问题标题】:How to define (and plot) a non-continuous function in R?如何在 R 中定义(和绘制)非连续函数?
【发布时间】:2021-12-29 10:04:37
【问题描述】:

假设我们有函数y = x^2,我们可以像这样从x=0 到x=100 绘制这个连续 函数:

library("ggplot2")
eq = function(x){x^2}
ggplot(data.frame(x=c(1, 100)), aes(x=x)) + 
  stat_function(fun=eq) +
  theme_void()

问题

但假设我们希望定义一个连续函数,例如,它与y=x^2 相同,但 x 没有介于 20 和 30 以及 50 和 70 之间的值。我们如何定义它?

上下文

我正在尝试将下面的第二行 (eq = function(x){x*x}) 替换为绘制非连续函数所需的任何内容(即保持所有其他代码相同)。

library("ggplot2")
eq = function(x){x*x} # CHANGE ONLY THIS LINE (IF POSSIBLE)
ggplot(data.frame(x=c(1, 100)), aes(x=x)) + 
  stat_function(fun=eq) +
  theme_void()

我将尝试在同一个绘图上绘制 许多 个非连续函数,因此我怀疑绘图本身的任何 hack(例如,在连续函数顶部添加元素)都不会缩放嗯..

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    对于不属于您的域的 x 值,您可以将函数的输出替换为 NA。

    library(ggplot2)
    
    eq <- function(x) {
      ans <- x * x
      ans[x >= 20 & x <= 30] <- NA
      ans[x >= 50 & x <= 70] <- NA
      ans
    }
    
    ggplot(data.frame(x = c(1, 100)), aes(x)) +
      stat_function(fun = eq) +
      theme_void()
    

    reprex package (v2.0.1) 于 2021 年 12 月 29 日创建

    【讨论】:

    • 谢谢,很清楚;完美运行。 7 分钟后接受。
    • 只是指定函数的另一种方法:replace(x * x, (x &gt;= 20 &amp; x &lt;= 30) | (x &gt;= 50 &amp; x &lt;= 70), NA)(尽管我倾向于喜欢当前的、更明确的、更好的回答;)。还要感谢@stevec 提出这么好的问题!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-24
    • 1970-01-01
    • 1970-01-01
    • 2015-02-17
    • 1970-01-01
    • 2012-01-15
    相关资源
    最近更新 更多