为何ggplot2正常运行但无输出?R绘图卡顿无法生成结果
问题原因
- 最核心的原因是你选择了
geom_point绘制全量原始骑行数据的散点图,且X轴选用了唯一值极多的ride_id字段:Divvy全量数据集通常包含数十万甚至上百万条骑行记录,渲染百万级散点+为每个唯一ride_id生成X轴刻度需要消耗极高的内存和计算资源。 - 此前能正常运行大概率是你之前测试代码时使用的是裁剪后的小样本数据集,后续切换为全量数据集后运算负载陡增;也有可能是R、ggplot2版本更新后渲染逻辑调整,导致同等数据量下运算需求升高。
修复方案
- 方案1(优先推荐):替换散点图为更适合展示骑行时长分布的图表类型,同时先过滤无效异常数据,无需渲染全量散点就能完成会员与休闲用户的差异对比,参考代码:
# 过滤骑行时长小于1分钟、超过24小时的无效记录,绘制箱线图对比两类用户的骑行时长分布 bikeshare_v8 %>% filter(ride_length > 60, ride_length < 86400) %>% ggplot(aes(x = member_casual, y = ride_length)) + geom_boxplot()
- 方案2:如果确实需要保留散点图形式,对数据集随机采样后再绘图,大幅降低渲染负载,参考代码:
# 随机抽取1%的样本绘制散点图 bikeshare_v8 %>% sample_frac(0.01) %>% ggplot(aes(x = ride_id, y = ride_length)) + geom_point()
- 方案3:调整X轴字段降低运算量,将X轴从
ride_id替换为行号,避免对大量字符型唯一值做排序渲染:
bikeshare_v8 %>% mutate(row_id = row_number()) %>% ggplot(aes(x = row_id, y = ride_length)) + geom_point()
- 方案4:先在R控制台单独运行绘图代码,排除Rmarkdown自身渲染故障的影响。
内容的提问来源于stack exchange,提问作者Karl Nagy
相关产品推荐
相关产品推荐

