如何自定义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
相关产品推荐
相关产品推荐

