在 ggplot() 中为不同的 x 值范围绘制不同的模型

Posted

技术标签:

【中文标题】在 ggplot() 中为不同的 x 值范围绘制不同的模型【英文标题】:Plotting different models for different x value ranges in ggplot() 【发布时间】:2022-01-10 00:27:54 【问题描述】:

我正在尝试为低 x 值显示线性模型,为更高 x 值显示非线性模型。为此,我将以 DNase 为例:

library(ggplot2)

#Assinging DNase as a new dataframe:

data_1 <- DNase

#Creating a column that can distinguish low and high range values:

data_1$range <- ifelse(data_1$conc <5, "low", "high")

#Attempting to plot separate lines for low and high range values, and also facet_wrap by run:

ggplot(data_1, aes(x = conc, y = density, colour = range)) +
  geom_point(size = 0.5) + stat_smooth(method = "nls", 
                                       method.args = list(formula = y ~ a*exp(b*x),
                                                          start = list(a = 0.8, b = 0.1)), 
                                       data = data_1,
                                       se = FALSE) + 
  stat_smooth(method = 'lm', formula = 'y~0+x') + 
  facet_wrap(~Run) 



但是,正如您所看到的,它似乎同时绘制了线性模型和非线性模型,我无法完全弄清楚在哪里放置可以告诉它只为每个模型绘制一个的信息。另外,如果可能的话,我可以将这些模型扩展到 x 轴上的全部值范围吗?

【问题讨论】:

也许这可以修复 x 轴上的值范围? ***.com/questions/47667994/… 【参考方案1】:

您可以为每个geom 提供特定数据。在这种情况下,使用子集 data_1 使用 range 仅向每个 stat_smooth() 调用提供相关数据(并将整个框架提供给 geom_point()

ggplot(NULL, aes(x = conc, y = density, colour = range)) +
  geom_point(data = data_1, size = 0.5) + 
  stat_smooth(data = subset(data_1, range == "high"),
              method = "nls", 
              method.args = list(formula = y ~ a*exp(b*x),
                                 start = list(a = 0.8, b = 0.1)), 
              se = FALSE) + 
  stat_smooth(data = subset(data_1, range == "low"), method = 'lm', formula = 'y~0+x') + 
  facet_wrap(~Run)

如果您想在所有数据上拟合两个模型,则只需在 data_1 中手动计算并手动绘制。

【讨论】:

这看起来很棒,非常感谢您的帮助。不幸的是,当我运行此代码时,它给出了以下错误:错误:mapping 必须由aes() 创建运行rlang::last_error() 以查看错误发生的位置。 > rlang::last_error() mapping 必须由 aes() 创建 回溯: 1. ggplot2::geom_point(data_1, size = 0.5) 2. ggplot2::layer(...) 3. ggplot2:::validate_mapping(映射) 糟糕,最后一分钟更改后忘记在geom_point() 中添加data = data1。修复了@Cameron。

以上是关于在 ggplot() 中为不同的 x 值范围绘制不同的模型的主要内容,如果未能解决你的问题,请参考以下文章

用闪亮的 ggplot2 绘制基因 FPKM 归一化计数值

在 R 中绘制 GAM:设置自定义 x 轴限制?

在ggplot2中绘制两个具有相同y变量但不同x变量的箱线图

在 ggmap 和 ggplot2 中为英国绘制地图

用ggplot2绘制密度,x轴上没有线

使用 ggplot 在折线图中仅绘制 x 轴上的日期向量的值