R语言dot plot点与因子匹配及新增点校准、连线实现方法
问题原因
基础R的dotchart()函数在分组展示时,每个点的y轴坐标不是按分组内部行号排列的,而是按全量观测的分组后顺序分配全局y坐标,你之前用每组的1:nrow作为y值,自然会全部落在图表底部的低y值区域。
解决方法
捕获dotchart()的返回值,这个返回值就是每个观测对应的实际y轴坐标,直接用这个坐标绘制new值的点和连线即可,修正后完整代码如下:
mydf <- data.frame(city=c(rep(c("Rome","NY","LA"),3)), old=c(11,23,13,24,12,13.5,15,17,22), new=c(12,22,13.5,25,14,15,12,17,14), method=c("a","a","a","b","b","b","c","c","c")) my_cols <- c("red", "blue", "dark green") new_cols <- c("orange", "light blue", "green") grps <- as.factor(mydf$method) # 核心:捕获dotchart返回的每个点的y轴坐标,和mydf观测顺序一一对应 y_pos <- dotchart(mydf$old, labels = mydf$city, groups = grps, gcolor = my_cols, color = my_cols[grps], cex = 0.6, pch = 19, xlab = "value") # 绘制new值的点,直接用对应y坐标匹配位置 points(mydf$new, y_pos, col = new_cols[grps], pch = 16, cex = 0.6) # 绘制old和new配对点的水平连线 segments(x0 = mydf$old, y0 = y_pos, x1 = mydf$new, y1 = y_pos, col = adjustcolor(my_cols[grps], alpha.f = 0.5), lwd = 1.5)
调整说明
- 不需要拆分
meth1/2/3子集,直接用因子索引批量匹配颜色,代码更简洁 - 修正了原代码最后两行重复绘制meth2点的错误
- 连线用
adjustcolor()降低透明度,避免遮挡原有数据点
内容的提问来源于stack exchange,提问作者Mathica
相关产品推荐
相关产品推荐

