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

R语言累积图异常:某条线条显示比其他线条更粗

问题描述

我用以下代码绘制累积分布函数(ECDF)图,但图中对应“75-100”组的绿色线条显示得比其他线条更粗,请问原因是什么?

代码

plot(ecdf(data1[data1$Group=="0-25",]$Change_in_PM2.5),
     xlim=c(-1,1),
     xlab="ΔPM2.5 (µg/m³)",
     ylab="Cumulative Proportion",
     main="ΔPM2.5 (µg/m³) distribution across Minority rate ranges",
     col="orange")
lines(ecdf(data1[data1$Group=="25-50",]$Change_in_PM2.5),
      col="#CC6666")
lines(ecdf(data1[data1$Group=="50-75",]$Change_in_PM2.5),
      col="#9999CC")
lines(ecdf(data1[data1$Group=="75-100",]$Change_in_PM2.5),
      col="#66CC99")

abline(v=0, col="black", lty=2, lwd=1)
legend(x = c(0.8, 1), y = c(0, 0.45), 
       legend=c("0-25","25-50","50-75","75-100"),  # text in the legend
       cex = 0.77, x.intersp = 0.3, y.intersp = 0.3,
       col=c("orange", "#CC6666", "#9999CC", "#66CC99"),  # point colors
       pch=15,bty="n")  # specify the point type to be a square

样本数据

structure(list(Minority_rate = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.41, 0, 0, 0, 0.5
), Change_in_PM2.5 = c(-0.2465, -0.2424, -0.2332, -0.2313, -0.224,
-0.2142, -0.2056, -0.1947, -0.1911, -0.1865, -0.1859, -0.1761,
-0.1725, -0.1593, -0.1577, -0.1532, -0.1531, -0.1413, -0.1332,
-0.1294, -0.119, -0.1159, -0.1153, -0.0993, -0.0962, -0.499,
-0.0859, -0.0817, -0.0806, -0.4755), Group = structure(c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 3L), .Label = c("0-25",
"25-50", "50-75", "75-100"), class = "factor"), Population = c(29308L,
36379L, 29395L, 29582L, 29588L, 23079L, 29546L, 29608L, 75403L,
36379L, 29629L, 36068L, 77297L, 81857L, 29186L, 34215L, 57007L,
36264L, 79050L, 31984L, 24278L, 59723L, 36197L, 21931L, 21257L,
77362L, 36396L, 67234L, 29504L, 186205L), Population_weighted_ChangeinPM2.5 = c(-5.4e-06,
-6.6e-06, -5.13e-06, -5.12e-06, -4.96e-06, -3.7e-06, -4.54e-06,
-4.31e-06, -1.08e-05, -5.07e-06, -4.12e-06, -4.75e-06, -9.97e-06,
-9.75e-06, -3.44e-06, -3.92e-06, -6.53e-06, -3.83e-06, -7.88e-06,
-3.1e-06, -2.16e-06, -5.18e-06, -3.12e-06, -1.63e-06, -1.53e-06,
-2.89e-05, -2.34e-06, -4.11e-06, -1.78e-06, -6.62e-05)), row.names = c(NA,
30L), class = "data.frame")

原因分析

核心原因是**"75-100"组没有任何样本数据**。从提供的样本数据可以看到,所有数据的Group列仅包含"0-25"、"25-50"、"50-75"三个类别,完全没有属于"75-100"的行。

当调用lines(ecdf(data1[data1$Group=="75-100",]$Change_in_PM2.5), col="#66CC99")时,由于子集为空,ecdf()会生成一个特殊的空ECDF对象。在R中绘制这个空ECDF时,会默认画出一条从左下角(最小x值, 0)到右上角(最大x值, 1)的斜线,这条线的宽度(lwd)继承了plot()函数的默认值(通常为2),而后续用lines()添加的其他ECDF线条默认lwd=1,因此绿色线条看起来更粗。

解决方法

  • 检查数据分组逻辑,确认是否有数据被正确分到"75-100"组,或该分组是否实际存在数据
  • 若该分组确实无数据,可从代码中移除对应的lines()调用和图例中的相关条目
  • 若需保留图例但隐藏无数据的线条,可给该条lines()指定lwd=1,或添加type="n"来不绘制这条线

内容的提问来源于stack exchange,提问作者T.P.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 04:01:07