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

基于ggplot绘制城乡O3、PM10、PM2.5月度对比柱状图问题求助

解决城乡三种污染物月度对比柱状图绘制问题

你的原代码无法得到预期效果,核心原因是ggplot2要求数据为长格式,但当前数据集是宽格式(O3、PM10、PM2.5作为独立列),直接在aes()里同时指定多个y轴和填充变量不符合语法规范。

解决步骤

  1. 转换数据格式:用tidyr包的pivot_longer函数把宽格式数据转成长格式,将三种污染物合并为一个分类列,对应浓度值单独成列。
  2. 重构绘图代码:基于长格式数据配置ggplot参数,让同月份的不同污染物柱子并排展示,再按城乡分面。

完整可运行代码

# 先加载必要包(如果没加载过)
library(tidyverse)

data %>%
  # 转换为长格式:将O3、PM10、PM2.5转为"污染物"和"浓度"两列
  pivot_longer(
    cols = c(O3, PM10, PM2.5),
    names_to = "污染物",
    values_to = "浓度"
  ) %>%
  ggplot(aes(x = Month_name, y = 浓度, fill = 污染物)) +
  # 让同月份的不同污染物柱子并排,避免重叠
  geom_col(position = position_dodge(width = 0.8), width = 0.7) +
  # 按城乡区域分面展示
  facet_wrap(~landtype) +
  # 设置图表标签,提升可读性
  labs(
    title = "城乡空气质量污染物月度对比",
    x = "月份",
    y = "污染物浓度",
    fill = "污染物类型"
  ) +
  # 可选:使用简洁主题优化视觉效果
  theme_minimal()

关键说明

  • pivot_longer:这是解决问题的核心,把宽格式数据转换为ggplot2能识别的长格式结构。
  • position_dodge:控制柱子的排列方式,让同一分组下的不同类别柱子并排显示,避免堆叠或重叠。
  • labs:替换默认的轴标签和标题,让图表信息更清晰直观。

内容的提问来源于stack exchange,提问作者user18343293

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 05:06:25