R语言中如何基于weatherCondition可视化rentals与season的关联关系
现有代码的核心问题
- 变量名不匹配:数据集里的天气字段是
weatherCondition,你代码中写的weatherCond会导致映射错误 - 过度绘制:10000行数据直接用散点图会出现大量点重叠,无法看清真实分布规律
- 信息密度低:仅展示散点没有统计维度的补充信息,无法体现变量关联逻辑
优化实现方案
基础优化版(解决可视化效果问题)
核心解决过度绘制问题,同时按天气分组展示,更贴合你基于天气变量看另外两个变量关系的需求:
library(tidyverse) # 可选操作:给分类变量加可读性标签,提升图表易读性(该数据集的通用编码规则如下) bikes <- bikes %>% mutate( season = factor(season, levels = 1:4, labels = c("春季", "夏季", "秋季", "冬季")), weatherCondition = factor(weatherCondition, levels = 1:4, labels = c("晴朗", "多云", "小雨雪", "大雨雪")) ) ggplot(data = bikes, mapping = aes(x = season, y = rentals)) + # 用带透明度的扰动散点解决重叠问题 geom_jitter(aes(color = weatherCondition), alpha = 0.3, width = 0.2) + # 按天气分面,单独展示每个天气下的季节-租赁量关系 facet_wrap(~weatherCondition) + # 添加箱线图展示分布统计值,不填充避免遮挡散点 geom_boxplot(fill = NA, outlier.shape = NA, width = 0.3) + labs( x = "季节", y = "租赁量", color = "天气状况" ) + theme_bw()
进阶版(添加相关性等统计信息)
如果需要量化展示变量相关性,可以引入ggpubr包快速添加相关系数和显著性标注:
library(tidyverse) library(ggpubr) ggplot(data = bikes, mapping = aes(x = as.numeric(season), y = rentals, color = weatherCondition)) + geom_jitter(alpha = 0.2, width = 0.1) + # 分组添加线性拟合线,展示趋势方向 geom_smooth(method = "lm", se = FALSE) + # 自动计算分组的皮尔逊相关系数和显著性 stat_cor(method = "pearson", label.x = 1.5) + scale_x_continuous(breaks = 1:4, labels = c("春季", "夏季", "秋季", "冬季")) + labs( x = "季节", y = "租赁量", color = "天气状况" ) + theme_bw()
优化效果说明
- 解决了散点重叠问题,同时通过箱线图/拟合线直观展示不同分组下的分布规律和趋势
- 分类变量替换为语义化标签后可读性大幅提升
- 相关系数标注可以直接展示季节和租赁量的相关性强弱、显著性,方便判断关联逻辑
- 分面展示可以更清晰对比不同天气状况下,季节对租赁量的影响差异
内容的提问来源于stack exchange,提问作者Embargo96
相关产品推荐
相关产品推荐

