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

ggplot2堆叠条形图X轴自定义设置求助

解决ggplot2堆叠条形图X轴标签修改问题

你的问题核心是原数据中x1为数值型变量,因此scale_x_discrete()无法生效(该函数仅针对离散型轴)。结合你使用scale_x_reverse()和coord_flip()的场景,以下两种方法可实现需求且保留原有图表格式:

方法一:将x1转换为带自定义标签的因子

直接把x1转为因子并提前定义标签,逻辑更清晰,无需额外调整轴参数:

install.packages("ggplot2")
install.packages("viridis")
install.packages("hrbrthemes")

library(ggplot2)
library(viridis)
library(hrbrthemes)

# 把x1转为因子,直接指定对应标签
x1 = factor(rep(1:3, times = 5), 
            levels = c(1,2,3), 
            labels = c("Cluster A", "Cluster B", "Cluster C"))
x2 = rep(0:4, times = 3)
x2 <- as.factor(x2)

df <- data.frame(x1,x2)
str(df)

ggplot(df, aes(x= x1, fill = x2)) +
  # 用scale_x_discrete控制轴顺序反转
  scale_x_discrete(limits = rev(levels(x1))) +
  geom_bar(position = position_fill(reverse = TRUE), stat="count") +
  theme_ipsum(axis = TRUE, grid = FALSE, axis_col = "black", axis_title_size = 10) +
  theme(plot.title = element_text(hjust = 0.5, size = 11, face = "bold"),
        axis.text = element_text(size = 11)) +
  scale_fill_viridis_d(option = "B")+
  coord_flip() 

方法二:保持x1为数值型,通过scale_x_reverse指定标签

如果不想修改原数据类型,可直接在scale_x_reverse()内添加breaks和labels参数实现标签替换:

install.packages("ggplot2")
install.packages("viridis")
install.packages("hrbrthemes")

library(ggplot2)
library(viridis)
library(hrbrthemes)

x1 = rep(1:3, times = 5)
x2 = rep(0:4, times = 3)
x2 <- as.factor(x2)

df <- data.frame(x1,x2)
str(df)

ggplot(df, aes(x= x1, fill = x2)) +
  scale_x_reverse(
    breaks = c(1,2,3),
    labels = c("Cluster A", "Cluster B", "Cluster C")
  ) +
  geom_bar(position = position_fill(reverse = TRUE), stat="count") +
  theme_ipsum(axis = TRUE, grid = FALSE, axis_col = "black", axis_title_size = 10) +
  theme(plot.title = element_text(hjust = 0.5, size = 11, face = "bold"),
        axis.text = element_text(size = 11)) +
  scale_fill_viridis_d(option = "B")+
  coord_flip() 

关键说明

  • 方法一中,用scale_x_discrete(limits = rev(levels(x1)))替代原scale_x_reverse(),既实现轴顺序反转,又保留自定义标签。
  • 方法二中,breaks指定需要替换的数值位置,labels对应设置新标签,无需修改原数据结构。

两种方法均可完美替换X轴标签,同时保留你原有的堆叠条形图样式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 20:43:09