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
相关产品推荐
相关产品推荐

