r - 将两个具有相同 X 向量的 ggplots 组合起来是不好的做法/风格吗?
问题描述
编辑说明:我最初的最小工作示例没有准确反映我的问题。发布了两个很好的参考答案,但被我的例子误导了。有关更多信息,请参阅我对 r2evan 的回答的评论。我已经编辑了这个例子。谢谢!
我最近发现自己处于想要合并两个 ggplot 对象的位置。plot1
并plot2
具有相同的x
值,我只是想从中获取y
值plot2
并将它们扔到plot1
的主干上。
它非常简单,所以我假设已经存在类似的东西,但我找不到任何东西。考虑到 R 的发达程度,我假设(1)这确实存在,但我还没有找到它,或者(2)我正在做的是糟糕的实践/风格。你能告诉我是哪一个吗?如果是后者,我为什么要避免这样做?
(实际情况:我在一个包中有一个方法,它返回一个格式良好的 ggplot 对象。我想用一堆不同的对象运行该方法,但将输出组合到一个图上。我会使用这个辅助函数来累积所有情节合二为一)
最小的工作示例
好吧,我想这不再是一个完整的例子了。假设已经定义了“mysteryObject”类,并且该plotMystery
方法适用于这些对象,并创建一个具有恒定 x 值但基于id
字段的不同 y 值的数据框。
object1 <- new("mysteryObject", id=1)
plot1 <- plotMystery(object1)
plot1
object2 <- new("mysteryObject", id=2)
plot2 <- plotMystery(object2)
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
解决方案
您不需要做太多,只需组合数据并提供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
而情节,不需要grob-combinations:
ggplot(data = datn, aes(x = x, y = y, color = source)) +
geom_line()
有许多方法可以进一步控制这一点,包括(1)定义哪些颜色可用于组/颜色/构面等;(2)传说的存在与美学;(3) 其他任何东西(因为它是ggplot2
)。
推荐阅读
- swift - Swift - 按日期对从 tableviewSections 中的 db 接收到的对象进行排序
- powerbi - Dax 措施以避免除 Power BI 中的一个之外的所有切片器
- swift - 从类继承协议?
- oracle - Oracle - 连接表上的部分删除
- reactjs - 我如何在函数体中使用通用类型
- android - 如何优化arcore中的viewrenderable?
- android - 如何将项目添加到分页列表
- python - 从管理页面运行自定义脚本(从 CSV 填充模型)
- ruby-on-rails - 无法使用过滤器实时推文:发生 Twitter::Error::Unauthorized
- angular - “未捕获(承诺中):SyntaxError: Unexpected token ' in JSON at position 2” 如何修复此错误?