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

如何在R语言ggplot2中调整Y轴并修改分组柱状图样式

求助:调整ggplot2分组柱状图至目标样式

我用R语言的ggplot2包编写了分组柱状图代码,读取mae_random.csv数据生成图表,但希望修改为指定的目标样式,不清楚如何调整代码,寻求帮助。

当前代码

# Install and load necessary packages
library(ggplot2)
library(tidyr)

# Your data
data <- read.csv("./mae_random.csv")

# Reshape data for ggplot
data_long$Model.Names <- factor(data_long$Model.Names, levels = unique(data$Model.Names))
# Define colors for each Model Name
model_colors <- c("#1f78b4", "#33a02c", "#e31a1c", "#ff7f00", "#6a3d9a",
                  "#a6cee3", "#b2df8a", "#fb9a99", "#fdbf6f", "#cab2d6", "#ffff99")

# Create grouped bar chart with increased size and custom colors
ggplot(data_long, aes(x = Model.Names, y = Value, fill = Model.Names)) +
  geom_bar(position = position_dodge2(width = 1.2, preserve = "single"), stat = "identity", color = "black") +
  labs(title = "Grouped Bar Chart",
       x = "Model Names",
       y = "Mean Absolute Error") +
  scale_y_continuous(breaks = seq(0, max(data_long$Value), by = 0.1)) +
  scale_fill_manual(values = model_colors) +
  theme_minimal() +
  theme(
    plot.title = element_text(size = 16, hjust = 0.5),
    axis.text.x = element_text(angle = 45, hjust = 1),
    axis.title.x = element_text(size = 14),
    axis.title.y = element_text(size = 14),
    axis.text.y = element_text(size = 12),
    legend.title = element_text(size = 12),
    legend.text = element_text(size = 10),
    plot.margin = margin(1, 1, 1, 1, "cm")
  )

当前生成图表

当前生成的图表

目标样式图表

目标样式图表

CSV数据结构

Model Names,TPE,Random,Grid
SVM MACCS,0.36,0.41,0.39
SVM Morgan,0.27,0.28,0.27
RF MACCS,0.31,0.31,0.26
RF Morgan,0.24,0.24,0.24
XGBoost MACCS,0.4,0.36,0.32
XGBoost Morgan,0.37,0.42,0.34
FFNN MACCS,0.7,0.67,0.64
FFNN Morgan,0.41,0.4,0.46
GCN,0.72,0.7,0.63
DMPNN,0.63,0.63,0.59
MAT,0.56,0.65,0.66

修正后的代码及说明

调整后的完整代码

library(ggplot2)
library(tidyr)

# 读取数据
data <- read.csv("./mae_random.csv")
# 修正数据重塑:将宽格式转为长格式,提取优化方法(TPE/Random/Grid)作为分组
data_long <- pivot_longer(data, 
                          cols = c(TPE, Random, Grid), 
                          names_to = "Optimizer", 
                          values_to = "MAE")
# 设置模型名称的顺序,保持和原数据一致
data_long$Model.Names <- factor(data_long$Model.Names, levels = data$Model.Names)

# 定义目标图表的配色(对应TPE/Random/Grid)
optimizer_colors <- c("#1f78b4", "#ff7f00", "#33a02c")

# 绘制目标样式的分组柱状图
ggplot(data_long, aes(x = Model.Names, y = MAE, fill = Optimizer)) +
  geom_bar(position = position_dodge(width = 0.8), stat = "identity", color = "black", width = 0.7) +
  labs(title = "Mean Absolute Error by Model and Optimizer",
       x = "Model Names",
       y = "Mean Absolute Error",
       fill = "Optimizer") +
  scale_y_continuous(breaks = seq(0, 0.8, by = 0.1), limits = c(0, 0.8)) +
  scale_fill_manual(values = optimizer_colors) +
  theme_minimal() +
  theme(
    plot.title = element_text(size = 16, hjust = 0.5),
    axis.text.x = element_text(angle = 45, hjust = 1, size = 10),
    axis.title.x = element_text(size = 14),
    axis.title.y = element_text(size = 14),
    axis.text.y = element_text(size = 12),
    legend.title = element_text(size = 12),
    legend.text = element_text(size = 10),
    panel.grid.major.x = element_blank(), # 去掉垂直网格线,和目标图一致
    plot.margin = margin(1, 1, 1, 1, "cm")
  )

关键调整点

  1. 修正数据重塑:原代码未定义data_long,使用pivot_longer将TPE/Random/Grid列转为分组列Optimizer,这是实现目标分组样式的核心——按优化方法而非模型填充颜色。
  2. 调整映射关系:将fill映射改为Optimizer,确保每个模型下的三个柱子对应三种优化方法,颜色按方法区分。
  3. 修正柱子排列:使用position_dodge(width = 0.8)替代原position_dodge2,让分组柱子紧凑排列,和目标图一致。
  4. 配色调整:使用三种颜色对应目标图的三个优化方法,而非原代码的11种模型颜色。
  5. 主题优化:移除垂直网格线,调整Y轴范围(适配最大值0.72),让图表更贴近目标样式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 01:59:51