You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 11:47:31