如何使用ggplot2基于不同数据集绘制图形——解决仅显示单张绘图的问题
解决ggplot2只显示最后一个绘图的问题
你遇到的问题很常见——因为你连续调用了两次ggplot()函数,每次调用都会创建一个全新的绘图对象,所以最后只有第二个绘图(绿色点)被渲染并显示出来,第一个绘图被覆盖了。要把红色线条、原有数据点和绿色点放在同一个图里,只需要在同一个ggplot()基础上叠加所有图层即可,不需要重新创建新的绘图对象。
方法一:在同一绘图对象上叠加不同数据集的图层
直接在第一个图的基础上,通过geom_point()的data参数指定第二个数据集,并设置对应的映射:
library(ggplot2) df = data.frame(Credible=c(0.2, 0.3), len=c(0, 0)) zero=data.frame(x0=0,y0=0) # 创建基础绘图,然后叠加所有需要的图层 ggplot(data=df, aes(x=Credible, y=len, group=1)) + geom_line(color="red")+ geom_point()+ # 叠加绿色点,指定zero数据集和对应的x/y映射 geom_point(data=zero, aes(x=x0, y=y0), color="green")+ labs(x = "Credible", y = "")
这样就能在同一个图里显示红色线条、df里的黑色点,以及zero里的绿色点了。
方法二:合并数据集后统一绘图
另一种思路是把两个数据集的列名统一,合并成一个数据集,再进行绘图。这样可以避免在图层中多次指定不同数据集:
library(ggplot2) df = data.frame(Credible=c(0.2, 0.3), len=c(0, 0)) # 修改zero的列名和df一致 zero=data.frame(Credible=0, len=0) # 合并两个数据集 combined_df <- rbind(df, zero) ggplot(data=combined_df, aes(x=Credible, y=len, group=1)) + # 只对原df数据集绘制红色线条 geom_line(color="red", data=df)+ # 根据位置设置点的颜色 geom_point(aes(color=ifelse(Credible==0, "green", "black")))+ labs(x = "Credible", y = "")+ # 直接使用指定的颜色值,不需要额外的颜色映射 scale_color_identity()
关键要点总结
- 每次调用
ggplot()都会生成一个独立的绘图对象,如果你想在同一个图里添加多个元素,必须在第一个ggplot()之后用+来叠加图层,而不是重新调用ggplot()。 - 不同的图层可以指定不同的数据集,通过图层的
data参数实现,这样就能灵活使用多个数据源绘制同一个图。
内容的提问来源于stack exchange,提问作者user552231
相关产品推荐
相关产品推荐

