ggplot2:使用geom_bar中的填充指定颜色时缺少图例

时间:2018-07-13 14:36:26

标签: r colors bar-chart legend geom-bar

在堆积的条形图中,我试图为不同的条形指定颜色。例如,治疗组的渐变绿色和对照组的渐变蓝色。但是,指定颜色后,我丢失了图例。有没有办法添加图例?

OK

当我为每个条形指定颜色时,图例消失了。

plot 1

plot2

我想要的图形显示在上方。有谁知道如何重新获得传说?一为治疗组,一为对照组。还是有一种手动添加图例的方法?

2 个答案:

答案 0 :(得分:0)

我不是ggplot2的专家,但我认为您失去了传奇,因为您在geom_bar中使用了参数赋值fill=Palette删除了美学映射。本质上,您的fill美学不仅取决于Response,而且还取决于ResponseGroup的组合,因为每个组对于相同的响应具有不同的颜色(这可能是一个有问题的做法,但这不是我决定的事情。

我认为这段代码可以满足您的需求。我为helper添加了data1字段,以具有适当的fill美观。请注意,我需要手动覆盖scale_fill_manual

中的图例标签
library(dplyr)
data1<- as.data.frame(data %>% 
    group_by(Group, Time, Response) %>%                     
    summarise(N= n())) %>%
  mutate(helper = as.character(group_indices(., Group, Response)))

# Define the color for control and treatment groups
trtCol <- c("#deebf7", "#9ecae1","#3182bd")
conCol <- c("#e5f5e0", "#a1d99b", "#31a354")
Palette<-c(conCol, trtCol, conCol, trtCol, conCol, trtCol)

library(ggplot2)
library(scales)

# Specify color in ggplot using "geom_bar (fill=Palette)"
ggplot(data1, aes(Group, N, fill = helper)) + 
  facet_wrap(~Time, strip.position = "bottom") +
  labs(title="Distribution of Responses by Groups over Time", x="Time Points", y="Percentage") +
  scale_fill_manual(name = "Response", values = Palette, labels = c(1, 2, 3, 1, 2, 3)) +
  geom_bar(position = "fill",stat = "identity") + 
  scale_y_continuous(labels = percent_format()) + 
  theme_classic() +
  theme(plot.title = element_text(hjust = 0.5), axis.text.x=element_blank(), axis.ticks.x=element_blank(), 
        panel.spacing = unit(0.1, "lines"))+
  geom_text(aes(x=0,y=-0.05,label="Control\nGroup"), size=3.5)+
  geom_text(aes(x=1,y=-0.05,label="Treatment\nGroup"), size=3.5)

答案 1 :(得分:0)

我使用了Zack建议的代码,并在其中添加了“ guides(fill = guide_legend(ncol = 2))”。这是我得到的图

Revised graph