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

使用ggplot绘制双数据集柱状图,实现X轴按数据集分组展示

解决思路与代码实现

要实现两类数据按颜色分组聚集、X轴标签独立的柱状图,核心是统一数据结构+强制X轴顺序+统一数值单位,以下是具体步骤:

1. 数据预处理(关键步骤)

首先统一两个数据集的列结构,添加分组标识,并修正数值单位(解决Y轴异常问题):

library(tidyverse)

# 处理树木正服务数据:重命名问题列+添加分组标签
ess_clean <- essNeighbor %>%
  rename(statement = ESS) %>%
  mutate(type = "树木正服务")

# 处理树木负服务数据:重命名问题列+添加分组标签+将小数转为百分比
dss_clean <- dssNeighbor %>%
  rename(statement = DSS) %>%
  mutate(type = "树木负服务",
         agree = agree * 100)  # 与正服务的百分比单位统一,避免Y轴刻度异常

# 合并数据并强制X轴顺序:先正服务的所有表述,再负服务的所有表述
combined_data <- bind_rows(ess_clean, dss_clean) %>%
  mutate(statement = factor(statement, levels = c(ess_clean$statement, dss_clean$statement)))

2. 绘制柱状图

使用ggplot绘制,指定颜色映射并优化显示效果:

ggplot(combined_data, aes(x = statement, y = agree, fill = type)) +
  geom_col(width = 0.8) +
  # 自定义浅绿、深绿配色
  scale_fill_manual(values = c("树木正服务" = "#a5d6a7", "树木负服务" = "#2e7d32")) +
  labs(title = "树木正负服务认可度对比",
       x = "具体表述",
       y = "认可度(%)",
       fill = "服务类型") +
  # 旋转X轴标签,避免长文本重叠
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

问题说明

  • 你之前遇到的Y轴异常,大概率是因为两类数据的agree单位不统一(负服务是小数,正服务是百分比),统一单位后即可解决。
  • 强制statement的因子水平顺序,能让X轴按「正服务所有表述→负服务所有表述」排列,自然实现同组数据聚集,不会出现交错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 08:07:29