密度估计折线图异常求助:Plot of Density, type="l"
解决密度折线图异常的问题
嘿,我来帮你搞定这个折线图的问题!你提到用type="l"绘制密度图时图形异常,本该是单条连续折线却出了问题,核心原因很明确:你的网格点x向量没有按从小到大的顺序排列。
折线图是严格按照数据在向量里的先后顺序连接点的,如果x是乱序的,线条就会在不同x值之间来回跳跃,自然没法呈现出密度图该有的平滑连续曲线。
具体解决步骤
我直接用你提供的数据来演示怎么修复:
- 先把x和y整理成R向量(对应你给出的数据):
x <- c(0.100001, 0.600001, 0.500001, 0.800001, 0.500001, 0.100001, 0.600001, 0.300001, 0.100001, 0.400001, 0.700001, 0.500001, 0.000001, 0.200001, 0.700001, 0.500001, 0.000001, 0.400001, 0.500001, 0.400001, 0.200001, 0.100001, 0.600001, 0.700001, 0.700001, 0.200001, 0.800001, 0.500001, 0.200001, 0.200001) y <- c(1.2246774, 1.1437131, 1.3626914, 0.6381394, 1.3626914, 1.2246774, 1.1437131, 1.5893983, 1.2246774, 1.5158009, 0.8852983, 1.3626914, 0.6912818, 1.5227328, 0.8852983, 1.3626914, 0.6912818, 1.5158009, 1.3626914, 1.5158009, 1.5227328, 1.2246774, 1.1437131, 0.8852983, 0.8852983, 1.5227328, 0.6381394, 1.3626914, 1.5227328, 1.5227328)
- 把x和y合并成数据框,方便排序:
df <- data.frame(x = x, y = y)
- 按x的值从小到大排序数据框:
df_sorted <- df[order(df$x), ]
- 用排序后的数据绘制折线图:
plot(df_sorted$x, df_sorted$y, type = "l", xlab = "网格点x", ylab = "密度估计值y", main = "连续密度折线图")
额外优化建议
观察你的数据,发现同一个x值对应多个y值(比如x=0.5出现了好几次),如果直接连接这些点,折线可能会有小波动。你可以先对相同x的y值做聚合处理(比如取均值),得到更平滑的密度曲线:
# 需要先加载dplyr包,如果没安装先运行 install.packages("dplyr") library(dplyr) df_aggregated <- df %>% group_by(x) %>% summarise(y_mean = mean(y)) %>% # 对相同x的y取均值 arrange(x) # 绘制聚合后的折线图 plot(df_aggregated$x, df_aggregated$y_mean, type = "l", xlab = "网格点x", ylab = "平均密度估计值", main = "聚合后平滑密度折线图")
这样处理后,就能得到你想要的单条连续折线啦!
内容的提问来源于stack exchange,提问作者Angel
相关产品推荐
相关产品推荐

