ggplot2技术咨询:基于mpg数据集绘制cty/hwy中位数与燃料类型双变量条形图
解决ggplot2绘制燃料类型与cty/hwy中位数双变量条形图的问题
嗨,我来帮你搞定这个需求!你现在要做的是按燃料类型(fl)展示城市油耗(cty)和高速油耗(hwy)的中位数,还要给x轴排序,对吧?咱们一步步来:
第一步:准备工具与数据处理
首先,除了ggplot2,咱们还需要dplyr来分组计算中位数,tidyr来把宽数据转成适合绘图的长数据。先加载这些包:
library(ggplot2) library(dplyr) library(tidyr)
接下来处理数据:
- 按
fl分组,计算cty和hwy的中位数 - 把
fl转换成有序因子,这样x轴就能按你想要的顺序排列(这里我按cty的中位数升序排,你也可以换成hwy或者降序) - 把宽数据转成长数据,方便ggplot区分两个油耗变量
代码如下:
mpg_median <- mpg %>% group_by(fl) %>% summarise( cty_median = median(cty), hwy_median = median(hwy) ) %>% # 按cty中位数升序排序fl,降序的话把arrange里的cty_median换成desc(cty_median) arrange(cty_median) %>% mutate(fl = factor(fl, levels = fl)) %>% pivot_longer(cols = c(cty_median, hwy_median), names_to = "fuel_type", values_to = "median_mpg") %>% mutate(fuel_type = gsub("_median", "", fuel_type)) # 把变量名简化一下
第二步:绘制双变量条形图
现在用处理好的数据绘图,注意这里要用geom_col()而不是geom_bar()——因为geom_bar()默认是统计每组的数量,而我们已经有了计算好的中位数数值,geom_col()更适合展示预计算的数值:
ggplot(mpg_median, aes(x = fl, y = median_mpg, fill = fuel_type)) + geom_col(position = position_dodge(width = 0.8), width = 0.7) + # 并排条形,调整间距 labs( title = "不同燃料类型的城市/高速油耗中位数", x = "燃料类型", y = "油耗中位数(英里/加仑)", fill = "油耗类型" ) + theme_minimal() + theme(axis.text.x = element_text(angle = 45, hjust = 1)) # 旋转x轴标签,避免重叠
关键说明
- 如果想调整x轴的排序方向,只需要在
arrange()里把cty_median改成desc(cty_median)就行 position_dodge()是让两个条形并排显示,如果你想堆叠的话,可以换成position_stack()- 你可以根据自己的需求调整颜色、主题这些细节,比如用
scale_fill_brewer()设置配色
内容的提问来源于stack exchange,提问作者cloud123
相关产品推荐
相关产品推荐

