如何在R的ggplot2中为不同站点分别使用geom_smooth与geom_line绘图?
解决方案
要实现部分站点用geom_smooth、其余用geom_line,核心是给每个几何对象单独指定对应的数据子集,具体操作如下:
- 先定义需要应用平滑曲线的站点列表(替换成你实际需要的站点名称):
smooth_stations <- c("站点1", "站点2") # 示例站点,自行修改为你的目标站点
- 修改ggplot代码,给每个geom图层分别传入筛选后的数据:
ggplot(data=StationsData, aes(x=Time, y=Temp, colour=Station))+ # 仅对指定站点绘制平滑曲线 geom_smooth(data = subset(StationsData, Station %in% smooth_stations), se = FALSE)+ # 对剩余站点绘制折线 geom_line(data = subset(StationsData, !Station %in% smooth_stations))+ scale_color_brewer(palette = "Set1")+ labs(x="Time (Months)", y="Temperature (ºC)", title= "Temperature")
关键说明
- 每个geom图层都支持通过
data参数单独设置数据源,用subset()函数筛选符合条件的站点; %in%用于判断站点是否在目标列表中,!表示取反,即筛选不在目标列表里的站点;geom_smooth的se=FALSE是关闭置信区间显示,若需要保留可删除该参数。
如果你的环境中已加载dplyr包,也可以用filter()替代subset(),写法更简洁:
geom_smooth(data = dplyr::filter(StationsData, Station %in% smooth_stations), se = FALSE)
内容的提问来源于stack exchange,提问作者Alonso Cid
相关产品推荐
相关产品推荐

