首页 > 解决方案 > 当我使用散点图时,是否可以将一个 ggplot 添加到另一个之上?

问题描述

我有一个包含白天点的数据集,我有一个包含晚上点的数据集。我想将夜晚的情节添加到白天的情节之上,这样我就可以在同一个情节中比较两者。这可能吗?

我已经有白天和黑夜的 ggplot,称为 plot_day 和 plot_night。我想在白天的图中添加夜晚的点,并且点的形状和颜色不同,所以我可以很容易地看到正方形是例如白天,圆形是例如夜晚:

ggplot(plot_day, aes(x=time, c(plot_day, plot_night))) +
ggtitle("") + theme_update(plot.title=element_text(hjust=0.5))+
geom_points(aes(y=plot_day, colour="plot_day"))+
geom_point(aes(y=plot_night, colour="plot_night"))+
labs(title="", x="", y="") + ylim(c(0,5))+
scale_color_discrete(name="", labels=c("Day", "Night")), theme_light() +
scale_x_date(date_labels=%b%, date_breaks="1 month", minor_breaks=NULL)+
theme_update(plot.title=element_text(hjust=0.5)) + theme_light()

标签: rggplot2

解决方案


我的方法将类似于以下内容,假设data_daydata_night具有相同的列(但替换您自己的数据):

ggplot(data_day, aes(x = time, y = some_y_value_column)) +
  geom_point(data = data_day, aes(shape = "day", colour = "day")) +
  geom_point(data = data_night, aes(shape = "night", colour = "night")) +
  ...theme/scales/labs etc...

然后,您可以通过添加适当的比例来控制形状和颜色:

  scale_colour_manual(values = c("red", "blue"), breaks = c("day", "night")) +
  scale_shape_manual(values = c(15, 19), breaks = c("day", "night"))

编辑:如果您先合并数据并执行以下操作,则会更容易:

new_data <- rbind(cbind(data_day, id = "day"),
                  cbind(data_night, id = "night")

ggplot(new_data, aes(x = time, y = some_y_value_column)) +
  geom_point(aes(shape = id, colour = id))

推荐阅读