R语言如何在同一张图中绘制x1、x2、x3等多个数据序列?
R语言多数据序列同图绘制实现方法
你当前代码每次调用plot函数都会清空原有画布新建绘图,因此无法实现多序列叠加。可通过以下两种常用方案实现需求:
方案1:基础绘图系统实现
第一个plot调用用来初始化画布并设置适配所有序列的坐标轴范围,后续序列使用points(散点)或lines(折线)函数追加绘制即可,参考代码如下:
a <- seq(-4, 4, 0.05) x1 <- pnorm(a) x2 <- pnorm(a, 2, 2) x3 <- pnorm(a, 5, 5) # 初始化画布,设置全局y轴范围避免数据截断 plot(a, x1, type = "p", col = "black", ylim = range(c(x1, x2, x3)), xlab = "a", ylab = "累积分布概率", main = "多正态分布累积分布对比") # 追加其余序列 points(a, x2, col = "blue") points(a, x3, col = "red") # 可选:添加图例标识序列 legend("topleft", legend = c("N(0,1)", "N(2,2)", "N(5,5)"), col = c("black", "blue", "red"), pch = 1)
方案2:ggplot2实现(更适合多序列场景)
将数据整理为长格式后,通过分组映射自动绘制所有序列,后续新增序列仅需调整数据源即可,不需要逐个手动追加图层:
library(ggplot2) # 构造长格式数据框 df <- data.frame( a = rep(a, 3), value = c(x1, x2, x3), 分布类型 = rep(c("N(0,1)", "N(2,2)", "N(5,5)"), each = length(a)) ) ggplot(df, aes(x = a, y = value, color = 分布类型)) + geom_point() + # 如需绘制折线替换为geom_line()即可 labs(x = "a", y = "累积分布概率", title = "多正态分布累积分布对比") + theme_bw()
注意事项
- 基础绘图场景下,不要重复调用
plot函数,所有追加图层统一用points/lines等专用函数 - 绘图前需提前计算所有序列的取值范围,通过
xlim、ylim参数设置合理的坐标轴范围,避免部分数据超出画布无法显示 - 序列数量大于3个时优先使用ggplot2方案,代码可维护性更高
内容的提问来源于stack exchange,提问作者Narimanoglu
相关产品推荐
相关产品推荐

