【问题标题】:Add multiple functions to ggplot with individual x values使用单个 x 值向 ggplot 添加多个函数
【发布时间】:2020-03-09 01:47:36
【问题描述】:

我有下表

> Test
# A tibble: 10 x 4
     Day Chemical   Amount    SE
   <int> <chr>       <dbl> <dbl>
 1     0 Chemical 1      5     1
 2     1 Chemical 1      4     1
 3     3 Chemical 1      3     1
 4     7 Chemical 1      2     1
 5    14 Chemical 1      1     1
 6     0 Chemical 2      6     1
 7     1 Chemical 2      5     1
 8     3 Chemical 2      4     1
 9     7 Chemical 2      3     1
10    14 Chemical 2      2     1

所以我创建了一个ggplot如下

ggplot(Test, aes(x=Day, y=Amount, fill=Chemical)) +
  geom_point(aes(shape=Chemical)) 

Concentration of Chemical over time

那我也想在ggplot中显示这两个函数。

a1 <- 100    
a11 <- 75

a2 <- 100 
a22 <- 80  
k1 <- 0.1 
k11 <- 0.01 

k2 <- 0.5 
k22 <- 0.01
f1 <- function(x) a1*exp(-k1*x)+a11*exp(-k11*x)
f2 <- function(x) a2*exp(-k2*x)+a22*exp(-k22*x)     

现在我的问题是:我如何告诉 ggplot 我希望第一个函数 (f1) 从“化学 1”中获取 x 值 (Amount),而第二个函数 (f2) 应该从《化学2》?

【问题讨论】:

  • 你为什么不用+ stat_function(fun = f1, aes(colour = "Chemical 1"))

标签: r function ggplot2 plot


【解决方案1】:

这是 2 组(或在您的情况下为 2 种化学品)的快速解决方案。您只需对数据进行子集化,然后调用 geom_line 仅在子集中应用该函数,然后为化学 2 再次执行此操作:

library(ggplot2)

    Test <- structure(list(Day = c(0L, 1L, 3L, 7L, 14L, 0L, 1L, 3L, 7L, 14L
    ), Chemical = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 
    2L), .Label = c("Chemical 1", "Chemical 2"), class = "factor"), 
        Amount = c(5L, 4L, 3L, 2L, 1L, 6L, 5L, 4L, 3L, 2L), SE = c(1L, 
        1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L)), class = "data.frame", row.names = c(NA, 
    -10L))

    g <- ggplot(Test, aes(x=Day, y=Amount, fill=Chemical)) +
      geom_point(aes(shape=Chemical))

    g + 
    geom_line(data=subset(Test,Chemical=="Chemical 1"),aes(y=f1(Day),col="Chemical 1"))+
    geom_line(data=subset(Test,Chemical=="Chemical 2"),aes(y=f2(Day),col="Chemical 2"))

你有超过 2 个吗?

【讨论】:

  • 工作正常。是的,它超过 2 个,但我完成了。谢谢!
  • 好的!是的,如果将它包含在原始 data.frame 中会更好
  • 糟糕,我看到错字了,应该是第二个 geom_line 中的 f2(Day)
  • 嗨@oliebisc,检查你是否使用了正确的函数,f2 到化学 2 和 f1 到化学 1,为我的错字道歉..
猜你喜欢
  • 2019-11-21
  • 1970-01-01
  • 2017-12-22
  • 2018-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-29
  • 2017-11-05
相关资源
最近更新 更多