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

如何自定义ggplot堆叠水平条形图的轴顺序、变量排序与配色

R ggplot堆叠水平条形图自定义排序与配色解决方案

需求1:自定义Y轴问题项显示顺序

你用coord_flip()翻转坐标轴后,原映射到x的X列就是最终的Y轴分类项,只要将该列转为因子,手动指定levels为你想要的排列顺序即可。默认因子level排序对应Y轴从下到上的显示顺序,如果你要设置从上到下的显示顺序,直接按你要的顺序写level后,在ggplot代码中添加scale_x_discrete(limits = rev(levels(data_melted$X)))即可,示例:

# 替换括号内的文本为你实际的问题项,按你想要的从上到下的显示顺序排列
data_melted$X <- factor(data_melted$X, levels = c("问题项1", "问题项2", "问题项3", "Session detail", "问题项5"))

需求2:自定义堆叠条形内部变量排列顺序

你映射到fill的variable列的因子顺序直接决定堆叠顺序,将该列转为因子,按你想要的堆叠顺序设置levels即可,比如要agree排在最左侧(堆叠的第一层):

# 替换括号内的文本为你实际的变量名,按你想要的从左到右的堆叠顺序排列
data_melted$variable <- factor(data_melted$variable, levels = c("agree", "neutral", "disagree"))

需求3:使用十六进制色值自定义配色

删除原有代码里的scale_fill_grey(),改用scale_fill_manual()传入自定义十六进制色值,色值顺序要和上面设置的variable的levels顺序一一对应:

# 示例色值可替换为你需要的十六进制代码,数量要和variable的类别数一致
scale_fill_manual(values = c("#2ECC71", "#F1C40F", "#E74C3C"))

修改后完整可运行代码

library(reshape2)
library(ggplot2)

data_melted <- melt(Data, id.vars = "X")
# 自定义Y轴问题项顺序,替换为你实际的分类
data_melted$X <- factor(data_melted$X, levels = c("问题1", "问题2", "问题3", "Session detail", "问题4"))
# 自定义堆叠变量顺序,替换为你实际的变量
data_melted$variable <- factor(data_melted$variable, levels = c("agree", "neutral", "disagree"))

ggplot(data = data_melted)+
  geom_bar(mapping = aes(x = X, y = value, fill = variable),position="fill", stat="identity")+
  coord_flip()+
  # 若要Y轴按你设置的level顺序从上到下显示,取消下行注释即可
  # scale_x_discrete(limits = rev(levels(data_melted$X))) +
  scale_y_continuous(limits=c(0, 1))+
  theme(
    panel.background = element_blank(),
    axis.title.x = element_blank(),
    legend.position = "bottom") +
  # 替换为你需要的十六进制色值,顺序与variable的levels对应
  scale_fill_manual(values = c("#009E73", "#F0E442", "#D55E00")) + 
  theme_classic()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:48:03