首页 > 解决方案 > 在ggplot中自定义并排(闪避)条形图的颜色

问题描述

我正在尝试为并排条形图中使用的每个组创建自定义调色板。

#Setup Values & DataFrame
class_list <- c("A","B","C","D","E","F","G")
values_1   <- c(0.45,0.3,0.5,0.4,0.55,0.45,0.3)
values_2   <- c(0.4,0.45,0.3,0.45,0.4,0.55,0.4)
df <- data.frame(class=class_list, v1=values_1, v2=values_2)

#Melt Dataframe 
df_plot <- melt(df, id.vars='class')

#Create Colour Palette
colour_palette = c("#CDF57A","#ABCE66","#375623","#FFFF00","#A87000","#732600","#FF0000")
  
#Create Dodged Bar Chart 
p <- ggplot(df_plot, aes(x=class, y=value, fill=class, family=variable)) + theme_classic()
p <- p + geom_bar(stat='identity', position='dodge', colour='black') 
p <- p + scale_fill_manual(values = colour_palette) + theme(legend.position="none")
p

产生:

代码的预期输出

在此处输入图像描述

但是,我正在尝试创建这样的东西:

期望的输出

在此处输入图像描述

(理想情况下,我可以有另一个自定义调色板,而不是一种颜色)

标签: rggplot2bar-chart

解决方案


为了达到您想要的结果,您可以使用 egclassvariableon进行映射。fillinteraction

作为如何添加第二个 platte 的示例,我只是颠倒了您的调色板以复制颜色数量:

library(ggplot2)
library(reshape2)
#Setup Values & DataFrame
class_list <- c("A","B","C","D","E","F","G")
values_1   <- c(0.45,0.3,0.5,0.4,0.55,0.45,0.3)
values_2   <- c(0.4,0.45,0.3,0.45,0.4,0.55,0.4)
df <- data.frame(class=class_list, v1=values_1, v2=values_2)

#Melt Dataframe 
df_plot <- melt(df, id.vars='class')

#Create Colour Palette
colour_palette = c("#CDF57A","#ABCE66","#375623","#FFFF00","#A87000","#732600","#FF0000")
colour_palette <- c(colour_palette, rev(colour_palette))
#Create Dodged Bar Chart 
p <- ggplot(df_plot, aes(x=class, y=value, fill=interaction(class, variable))) + theme_classic()
p <- p + geom_bar(stat='identity', position='dodge', colour='black') 
p <- p + scale_fill_manual(values = colour_palette) + theme(legend.position="none")
p


推荐阅读