ggplot2绘制不同线型geom_errorbar时如何设置末端须为实线
你当前使用geom_errorbar绘制分组误差棒时,线型会默认应用到误差棒的中间竖线和两端横须,要实现横须保持为实线、仅竖线跟随分组线型,可通过拆分图层的方式实现。
现有效果示例:
修改后可运行代码
library(ggplot2) library(plyr) # 构造数据集 DF <- data.frame( group = rep(c("a", "b", "c", "d"),each=10), Ydata = c(seq(1,10,1),seq(5,50,5),seq(20,11,-1),seq(0.3,3,0.3)), Xdata = c(seq(1,10,1),seq(5,50,5),seq(20,11,-1),seq(0.3,3,0.3))) # 汇总统计 subDF <- ddply(DF, .(group), summarise, X = mean(Xdata), Y = mean(Ydata), X_sd = sd(Xdata, na.rm = T), Y_sd = sd(Ydata)) # 绘图代码 ggplot(subDF, aes(x = X, y = Y)) + # 第一层:绘制全实线的误差棒,保留两端横须的实线效果 geom_errorbar(aes(ymin = Y-Y_sd, ymax = Y+Y_sd), width = 1, size = 0.5, linetype = "solid") + # 第二层:仅绘制中间竖线,绑定分组线型,覆盖上一层的实线竖线 geom_linerange(aes(ymin = Y-Y_sd, ymax = Y+Y_sd, linetype = group), size = 0.5) + geom_point(cex = 3) + scale_linetype_manual(values = c("solid","twodash","longdash","longdash"))
代码说明
- 把原代码中顶层aes的
linetype = group移到了geom_linerange的局部aes中,避免影响第一层误差棒的线型 - 第一层
geom_errorbar统一用实线绘制完整误差棒,确保两端横须为实线 - 第二层
geom_linerange仅绘制中间的竖线,应用分组的自定义线型,刚好覆盖第一层的实线竖线,最终实现需求效果
内容的提问来源于stack exchange,提问作者david wei
相关产品推荐
相关产品推荐

