You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 22:06:07