R语言中如何从DataFrame绘制同图多色行连续曲线
问题核心原因
之前的代码没法生成同图多曲线,两个关键问题:
- R的绘图逻辑里,每次执行
plot()都会清空当前画布,生成一张全新的图。你在apply循环里逐行调用plot,自然会输出6张完全独立的单曲线图,根本没法叠到一起 - 数据维度错配:矩阵第一列是目标编号(1到6),不是累计概率值,直接拿整行数据绘图会把数字序号当成概率值,导致坐标轴范围错乱、曲线变形
可直接运行的绘图代码
数据梳理
你的res_final为6行9列的矩阵结构:
- 每行对应一个独立目标
- 第一列存储目标ID(1~6),剩下8个列依次对应传感器数量从1递增到8时的累计检测概率
绘图时x轴固定为1~8的传感器数量序列,y轴取每行去掉第一列后的8个概率值即可。
# 配置6种高区分度的曲线颜色 line_colors <- c("#E41A1C", "#377EB8", "#4DAF4A", "#984EA3", "#FF7F00", "#A65628") # 提取绘图用的概率矩阵:去掉第一列的目标ID列 prob_matrix <- res_final[, -1] # 初始化全局画布:只执行一次plot搭建基础绘图框架,后续内容全部叠加到这个框架上 plot( x = 1:ncol(prob_matrix), y = prob_matrix[1, ], type = "l", lwd = 2, col = line_colors[1], xlab = "Number of sensors", ylab = "Cumulative detection probability", main = "Evolution of cumulative probabilities for 6-targets based on the Number of sensors", ylim = c(min(prob_matrix) - 0.05, max(prob_matrix) + 0.05) # 给y轴留适当边距,避免曲线贴到坐标轴 ) # 循环把剩余5条曲线叠加到画布上 for (row_idx in 2:nrow(prob_matrix)) { lines( x = 1:ncol(prob_matrix), y = prob_matrix[row_idx, ], col = line_colors[row_idx], lwd = 2 ) } # 添加图例标注每条曲线对应的目标 legend( "bottomright", legend = paste("Target", res_final[, 1]), col = line_colors, lwd = 2 )
实用注意点
- 多曲线同图的核心规则:只在最开始调用一次
plot()初始化画布,后续所有新增图形元素(曲线、点、标注)都用lines()、points()这类叠加类函数操作,绝对不能在循环里反复调用plot() - 提前把标识类的非数值列(比如目标ID)从绘图数据里剔除,避免把标识值当成有效数据点导致曲线偏移、坐标轴范围异常
内容的提问来源于stack exchange,提问作者Tou Mou
相关产品推荐
相关产品推荐

