R ggplot如何在分组的条形图中使用相同颜色的阴影?

时间:2018-11-25 09:07:10

标签: r ggplot2 colors grouping bar-chart

我正在尝试绘制一个分组的条形图,其中的x轴包含不同的状态,并且在每个状态下,我都具有冬季,春季,夏季,秋季的值。基本上,在x轴上,我有5个状态,每个阶段都是一簇条形,在每个簇中,我有4条形条,每个条形分别用于冬季,春季,夏季,秋季。

我想改变每个群集中4个变量的颜色,以使它们是相同颜色的不同阴影。假设我选择了蓝色,我希望冬天成为最深的蓝色阴影,而让秋天成为最浅的蓝色阴影。我还希望代码具有灵活性,以便每个集群中可以容纳4个以上的值。

这是我正在使用的代码

# fill = different categories within a group
# x = grouping vars
# y = value (height of bar)
xvar = rlang::sym('states') #grouping var
yvar = rlang::sym('pct_aware')
xlabel = ('state')
ylabel = ('% of respondents')
graphtitle = 'awareness by segmentation'

ylim_max = 100

withingroupvar = rlang::sym('seasons')
legendtitle = "seasons"

p <- ggplot(data = graphinput, aes(x = factor(!!xvar, levels = jobboards), y = !!yvar,
                                   fill = factor(!!withingroupvar, levels =segorder_text))) 
p + geom_bar(stat = "identity",
             position = position_dodge(0.9)) +
  labs(x = xlabel, y = ylabel) +
  ggtitle(graphtitle) +
  geom_text(aes(label=round(!!yvar,0)), vjust=-0.6, color="black",
            position = position_dodge(0.9), size=4) + 
  scale_fill_manual(name = legendtitle, 
                    values = c('winter'="pink", 'spring' = "aquamarine", 'summer' = "lightblue", 'fall' = "salmon1"),
                    breaks=segorder_text) +
  theme(text = element_text(size = 15))  + ylim(0,ylim_max)

现在,我正在为4个季节中的每个季节手动分配颜色值。我希望这是自动的-我只需要选择基本颜色,R就可以为每个季节分配相同颜色的不同阴影。

我应该如何修改代码以实现此目的?

1 个答案:

答案 0 :(得分:2)

我要定义一个调色板

login()

我将在scale_fill_manual中引用此调色板。

#define color palette
color_palette <- colorRampPalette(colors = c("steelblue", "darkblue"))(length(segorder_text));

然后您的代码应如下所示:

... scale_fill_manual(name = legendtitle, values = color_palette) + ...