R中plot()函数如何确定x轴上数据点的绘制位置?
R 绘图点堆叠问题原因及解决方案
1. R基础绘图的坐标定位规则
R中plot(y ~ x)的绘图逻辑是按向量索引一一对应生成坐标点:
- 对第i个观测,x轴坐标取
x[i]的取值,y轴坐标取y[i]的取值 - 只要两个取值都不是NA,就会在对应坐标位置绘制点
- R不会自动按分组值匹配对应的y值,所有坐标都严格按索引位置对应
2. 出现点堆叠的根本原因
你的操作逻辑存在本质混淆:
- 统计得到的
OLR/PLR本来只有7个有效值,分别对应1-7这7个区间的频次,本质是汇总统计结果,原本就应该和x=1:7一一对应绘图,完全不需要做填充NA的操作 - 后续你把
OLR/PLR填充了上万个NA,凑到和随机生成的IY等长:IY是长度超过2万的向量,所有值都是1-7的随机整数,而OLR只有前7个位置有实际值,其余全是NA - 最终绘图时只有7个有效点,这7个点的x坐标是
IY前7位的随机值,完全可能出现多个点x值相同的情况,自然就会堆叠在同一个x轴位置
另外注意你的代码里存在笔误:OLR6和OLR7的子集筛选条件完全一致,都是ylrt > 400 & ylrt <= 680,会导致两个统计值重复。
3. 正确绘图代码
你不需要生成IY向量,也不需要做NA填充,直接用1-7的分组值对应频次绘图即可:
# 加载必要包(你用到了as_tibble需要先加载tidyverse) library(tidyverse) # 保留你之前的统计逻辑,注意修复OLR7的筛选条件 # ... # 直接绘图 x_group <- 1:7 # 绘制观测值散点 plot(x = x_group, y = OLR, main = "Umbrella频次分布对比", xlab = "区间分组", ylab = "出现频次", pch = 16, col = "blue", ylim = range(c(OLR, PLR), na.rm = T)) # 叠加预测值散点 points(x = x_group, y = PLR, pch = 16, col = "red") # 加图例 legend("topright", legend = c("观测值", "预测值"), col = c("blue", "red"), pch = 16)
内容的提问来源于stack exchange,提问作者PDiddyA
相关产品推荐
相关产品推荐

