R语言中通过图表对比不同Freq对应的Provided数值的方法
问题解答
原代码不符合预期的原因
- 你的数据集有19万+观测,直接使用
geom_point()会出现严重的点重叠(过绘制),无法看清数据分布规律 geom_line()默认按数据行顺序连接散点,在x轴存在大量重复取值的情况下,连线完全没有趋势参考价值
一、可视化Freq与Provided的关联
前置数据预处理
首先过滤两个变量的缺失值,避免绘图异常:
library(tidyverse) df_clean <- df %>% drop_na(Freq, Provided)
方案1:带拟合线的透明散点图
适合看整体趋势,通过透明度解决过绘制问题,叠加拟合线直观判断正相关是否存在:
ggplot(df_clean, aes(x = Freq, y = Provided)) + geom_point(alpha = 0.2, size = 0.8) + # 降低透明度、缩小点尺寸避免重叠 geom_smooth(method = "lm", se = TRUE, color = "red") + # 线性拟合线,可改为method="loess"看非线性趋势 labs(x = "Freq", y = "Provided", title = "Freq与Provided的相关性趋势") + theme_bw()
方案2:分组箱线图
如果Freq的取值为有限的离散值,按Freq分组绘制Provided的箱线图,可清晰查看每个Freq对应的Provided分布:
ggplot(df_clean, aes(x = factor(Freq), y = Provided)) + geom_boxplot() + labs(x = "Freq", y = "Provided", title = "不同Freq取值下Provided的分布") + theme_bw() + theme(axis.text.x = element_text(angle = 45, hjust = 1)) # x轴标签过多时可旋转避免重叠
二、对比Freq≥10与Freq<10的Provided差异
第一步:构造分组变量
df_clean <- df_clean %>% mutate(Freq_group = ifelse(Freq >= 10, "Freq≥10", "Freq<10"))
方案1:箱线图(最直观)
直接对比两个分组的Provided分位数分布:
ggplot(df_clean, aes(x = Freq_group, y = Provided)) + geom_boxplot() + labs(x = "Freq分组", y = "Provided", title = "不同Freq分组下Provided的分布对比") + theme_bw()
方案2:小提琴+箱线组合图
可同时展示分布密度和分位数信息:
ggplot(df_clean, aes(x = Freq_group, y = Provided)) + geom_violin(alpha = 0.5, fill = "lightblue") + geom_boxplot(width = 0.2, fill = "white") + labs(x = "Freq分组", y = "Provided", title = "不同Freq分组下Provided的分布对比") + theme_bw()
补充说明
如果Provided存在极端异常值,可在绘图代码中添加scale_y_log10()对Y轴做对数转换,避免异常值压缩有效数据的展示空间;如果需要统计验证两组差异,可配合wilcoxon秩和检验输出显著性p值。
内容的提问来源于stack exchange,提问作者Cryena
相关产品推荐
相关产品推荐

