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

如何在ggplot中同时展示两个变量?数据集与实现需求问询

解决方法

你的问题出在数据格式和绘图逻辑上:原代码只绘制了Forest这一个指标,还错误地用Lakes做分面,导致每个分面只显示单个地区的森林数据,完全没法同时对比同一地区的森林和湖泊数量。

要实现「x轴显示地区,同时展示每个地区的森林和湖泊数量」的效果,核心是把宽格式数据转成长格式,让ggplot能同时识别两个指标。

步骤1:转换数据格式

用tidyr::pivot_longer把宽格式(Forest、Lakes作为列)转成长格式(把这两列合并成「类别-数值」的结构):

# 先加载tidyverse包(包含dplyr、ggplot2、tidyr)
library(tidyverse)

# 转换数据
data_long <- data %>%
  pivot_longer(
    cols = c(Forest, Lakes),  # 要转换的目标列
    names_to = "Category",    # 新的类别列名称
    values_to = "Area"        # 新的数值列名称
  )

转换后的数据结构示例:

RegionCategoryArea
NorthForest30
NorthLakes40
WestForest40
WestLakes100

步骤2:绘制对比柱状图

用长格式数据绘图,通过fill参数区分森林和湖泊,用position_dodge让同一地区的两个柱子并排显示,方便直接对比:

ggplot(data_long, aes(x = Region, y = Area, fill = Category)) +
  geom_col(position = position_dodge(width = 0.8)) +  # 控制柱子间距,避免重叠
  labs(
    title = "不同地区的森林与湖泊面积",
    x = "地区",
    y = "面积",
    fill = "类别"
  ) +
  theme_minimal()

可选:堆叠柱状图

如果想展示同一地区的总面积及两类区域的占比,可以去掉position_dodge,使用默认的堆叠模式:

ggplot(data_long, aes(x = Region, y = Area, fill = Category)) +
  geom_col() +
  labs(
    title = "不同地区的森林与湖泊面积(堆叠)",
    x = "地区",
    y = "面积",
    fill = "类别"
  ) +
  theme_minimal()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 21:09:21