You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将两个ggplot2绘制的图表合并为一个整合图表?

如何将两个ggplot2绘制的图表合并为一个整合图表?

嘿,我懂你现在的困扰——想把这两个ggplot图表合并成一个完整的图,结果用了combined_plot还是分开的,对吧?别担心,这里有两种实用的方法帮你搞定!

方法一:用patchwork包快速拼接(简单直观)

patchwork是专门为ggplot2设计的图表拼接工具,用起来超方便,完全不用复杂的设置。

步骤如下:

  1. 先安装并加载包:
install.packages("patchwork")
library(patchwork)
  1. 直接拼接你的两个图:
  • 如果想左右排列:
combined_plot <- plot1 + plot2
print(combined_plot)
  • 如果想上下排列(更适合共享x轴的场景):
combined_plot <- plot1 / plot2
# 还可以让它们共享x轴刻度,避免重复显示
combined_plot <- plot1 / plot2 + plot_layout(axes = "collect")
print(combined_plot)

方法二:制作双y轴图表(共享同一个x轴)

如果你的需求是让两个图表共享x轴(都是日期),一个用左侧y轴展示累计观测数,一个用右侧y轴展示光照数据,那就可以用ggplot的双y轴功能来实现:

需要注意的是,两个变量的数值范围可能差异很大,所以我们要先计算一个缩放比例,让光照数据适配累计观测数的刻度范围,再添加到图表中。这里给你修改好的完整代码:

# 加载必要的包
library(ggplot2)

# 先创建基础柱状图(保留你原来plot1的内容)
combined_plot <- ggplot() + 
  geom_bar(data = complete_august_data, aes(x = DATE, y = Count, fill = MANUAL.ID.), 
           stat = "identity", width = 0.7, position = "dodge") +
  geom_bar(data = complete_july_data, aes(x = DATE, y = Count, fill = MANUAL.ID.), 
           stat = "identity", width = 0.7, position = "dodge") +
  labs(title = "Kumulative kurver og belysning for juli og august ved Borupgård 2018",
       x = "Dato",
       y = "Kumulative observationer",
       fill = "Art") +
  scale_x_date(date_labels = "%Y-%m-%d", limits = as.Date(c("2018-07-26", "2018-08-29"))) +
  theme_minimal()

# 计算缩放比例,让光照数据适配累计观测数的数值范围
scale_factor <- max(complete_august_data$Count, complete_july_data$Count, na.rm = TRUE) / max(result_df$Belysning, na.rm = TRUE)

# 添加右侧y轴和光照的折线、散点
combined_plot <- combined_plot +
  geom_line(data = result_df, aes(x = Dato, y = Belysning * scale_factor), color = "gold2") +
  geom_point(data = result_df, aes(x = Dato, y = Belysning * scale_factor), color = "goldenrod", size = 2) +
  scale_y_continuous(
    sec.axis = sec_axis(~ . / scale_factor, name = "Belysning")
  ) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

# 打印最终图表
print(combined_plot)

⚠️ 小提醒:双y轴虽然看起来直观,但有时候会误导读者对数据趋势的判断,建议只有在两个变量的趋势确实需要直接对比时才使用哦!

另外,你之前用的combined_plot没效果,大概率是因为这个函数不属于ggplot2的官方工具,或者用法不符合要求,而上面的两种方法都是ggplot社区常用且可靠的方案~

备注:内容来源于stack exchange,提问作者Marie Friis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 12:49:29