r - 将两个 ggplot 与相同的 X 向量组合在一起是否是不好的做法/风格?

标签 r ggplot2

编辑注意:我原来的最小工作示例没有准确反射(reflect)我的问题。发布的两个答案是很好的引用,但被我的例子误导了。有关更多信息,请参阅我对 r2evan 的答案的评论。我已经编辑了这个例子。谢谢!


我最近发现自己想要合并两个 ggplot 对象。 plot1plot2 具有相同的 x 值,我只想从 获取 y 值plot2 并将它们扔到 plot1 的主干上。

这非常简单,所以我假设类似的东西已经存在,但我找不到任何东西。考虑到 R 的发达程度,我认为要么(1)这确实存在,但我只是还没有找到它,或者(2)我正在做的做法/风格很差。您能否告诉我是哪一个?如果是后者,我为什么要避免这样做?

(实际情况:我的包中有一个方法,它返回一个格式良好的 ggplot 对象。我想使用一堆不同的对象运行该方法,但将输出合并到一个图中。我会使用这个辅助函数将所有图累积成一个)


最小工作示例

好吧,我想这不再是一个完整的示例了。假设已经定义了“mysteryObject”类,并且 plotMystery 方法对这些对象起作用,并根据 id 创建具有恒定 x 值但不同 y 值的数据框 field 。

object1 <- new("mysteryObject", id=1)
plot1 <- plotMystery(object1)
plot1

plot1

object2 <- new("mysteryObject", id=2)
plot2 <- plotMystery(object2)
plot2

plot2

combine_plots <- function(ggplot1, ggplot2, color = black) {
    return(
        ggplot1 +
            geom_line(aes(x = ggplot2$data[,1], y = ggplot2$data[,2]), color = color)  
    )
}

plot_combined <- combine_plots(plot1, plot2, color = "red")
plot_combined

plot_combined

最佳答案

您不需要做太多事情,只需组合数据并提供一个“源”类型字段,ggplot 可以使用该字段来分割/分组/颜色。

例如,您的数据和合并数据:

dat1 <- data.frame(x = c(1,2,3,4,5), y = c(1,2,3,4,5))
dat2 <- data.frame(x = c(1,2,3,4,5), y = c(1,2,9,16,25))

datn <- rbind.data.frame(
  transform(dat1, source = "dat1"),
  transform(dat2, source = "dat2")
)
datn
#    x  y source
# 1  1  1   dat1
# 2  2  2   dat1
# 3  3  3   dat1
# 4  4  4   dat1
# 5  5  5   dat1
# 6  1  1   dat2
# 7  2  2   dat2
# 8  3  9   dat2
# 9  4 16   dat2
# 10 5 25   dat2

情节,不需要任何组合:

ggplot(data = datn, aes(x = x, y = y, color = source)) +
  geom_line()

sample grouped data

有很多方法可以进一步控制这一点,包括(1)定义哪些颜色可用于组/颜色/面等; (2) 传说的存在和美感; (3) 几乎任何其他东西(因为它是 ggplot2 )。

关于r - 将两个 ggplot 与相同的 X 向量组合在一起是否是不好的做法/风格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55617437/

相关文章:

r - ggplot 的注释中的文本格式

r - 如何使用ggplot2绘制组合直方图和累积line_plot

r - 是否可以避免 ggrepel 轴标签重叠?

r - ggplot 显示自举曲线拟合的置信区间

r - 进行以下分组依据的R方法是什么?

r - 保留旧的(3.1.0 之前)type.convert 行为

Python 相当于 R 中的 Matrix::chol 和 Matrix::solve?

r - 编辑grid.arrange标题的样式。粗体,斜体等R

r - facet_zoom() 同时设置轴限制

r - 自定义分组 dplyr 函数 (sample_n)