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

R语言绘制不同颜色变量观测值并添加均值线的方法

问题根源

你之前的代码无法得到正确效果,核心是两个逻辑错误:

  • 调用c(data)会把10行5列的矩阵展平为长度50的一维向量,绘图时x轴坐标范围是150,和长度为10的均值向量`aver`的x轴范围110完全不匹配,导致均值线无法正常叠加显示
  • 颜色参数没有和列做固定映射,会按点顺序循环分配颜色,无法实现每个国家对应固定专属颜色的要求。
可直接运行的正确实现(基础R版本)

不需要额外安装第三方包,用R自带绘图函数即可实现需求:

# 数据构造(和你原有逻辑完全一致)
set.seed(123) # 仅用于固定随机结果方便复现,可删除
data <- matrix(runif(n=50, min = -1, max = 1),ncol = 5)
data <- round(data,2)
colnames(data) <- c("A","B","C","D","E")
aver <- as.matrix(rowMeans(data))
rownames(aver) <- c("X1","X2","X3","X4","X5","X6","X7","X8","X9","X10")

# 配置绘图参数
country_cols <- c("red","yellow","green","blue","black") # 5个国家对应颜色
x_pos <- 1:nrow(data) # x轴位置对应10行观测

# 初始化空白画布
plot(
  x = x_pos,
  y = rep(NA, length(x_pos)),
  ylim = c(-1, 1), # y轴匹配取值范围
  xaxt = "n", # 暂时隐藏默认x轴
  xlab = "观测样本",
  ylab = "取值"
)
# 自定义x轴刻度为X1~X10
axis(side = 1, at = x_pos, labels = rownames(aver))

# 逐列绘制每个国家的观测点
for (i in 1:ncol(data)) {
  points(
    x = x_pos,
    y = data[, i],
    col = country_cols[i],
    pch = 16, # 实心点辨识度更高
    cex = 1.2
  )
}

# 叠加行均值线
lines(
  x = x_pos,
  y = aver,
  col = "darkgrey",
  lwd = 2 # 加粗突出显示
)

# 添加图例
legend(
  "topright",
  legend = c(colnames(data), "行均值"),
  col = c(country_cols, "darkgrey"),
  pch = c(rep(16, 5), NA),
  lty = c(rep(NA, 5), 1),
  lwd = c(rep(NA, 5), 2),
  bty = "n"
)
效果说明

运行后输出的图表完全符合需求:

  • 5个国家的观测点分别使用指定的5种颜色区分
  • 深灰色粗线为每行计算得到的均值线
  • x轴刻度对应X1到X10的行标识,y轴范围和观测值的[-1,1]区间匹配
  • 右上角无框图例清晰标注每个颜色对应的国家,以及均值线的含义

内容的提问来源于stack exchange,提问作者nickolakis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 23:57:35