在条形图中同时使用scale_fill_manual和scale_x_discrete时,图例消失了。

3
下面的 ggplot 不生成图例。我想要一个标识条形图颜色的图例:
df1 <- data.frame(Response = factor(c(1,1,2,2,3,3,4,4)),
                  treatment = factor(c("Active",  "Placebo", "Active",
                  "Placebo", "Active","Placebo","Active","Placebo"),
                                       levels=c("Active","Placebo")),
              percent = c(16.81, 13.53, 17.42, 16.24, 25.33, 19.27,
                          100-16.81-17.42-25.33,100-13.53-16.24-19.25))

# Bar graph, with side-by-side bars
ggplot(data=df1, aes(x=Response, y=percent, fill=treatment, order=treatment)) + 
  geom_bar(stat="identity", position=position_dodge()) + 
  ylab("Percent") + xlab("Outcome") +
  scale_x_discrete(breaks=factor(1:4), labels=c("CR","PR","SD","PD"))+
  scale_fill_manual(values=c("black","red", name="Response", 
                breaks=1:2, labels=c("Active","Placebo"))
2个回答

3
除了最后一个`scale_fill_manual`部分,你的全部正确。引起问题的部分是`breaks=1:2`。但这不是真的,因为你设置了`fill=treatment`,这意味着断点被设置为`treatment的级别`。所以,如果你要设置`breaks`,它应该是例如`breaks=levels(factor(df1$treatment))`(这是多余的)。当然,你可以更改标签为任何值。例如:
为了不删除图例,你可以做以下操作:
# No issues changing values of labels for every breaks set
scale_fill_manual(values=c("black","red"), name = "Response",
      breaks = levels(factor(df1$treatment)), 
      labels = c("bla1", "bla2"))

然而,如果你想要使用相同的值集合作为breaks来为labels赋值,则此方法已经足够:

scale_fill_manual(values=c("black","red"), name = "Response")

以下是完整的代码:
p <- ggplot(data = df1, aes(x = Response, y = percent, fill = treatment, 
            order = treatment))
p <- p + geom_bar(stat = "identity", position = position_dodge()) 
p <- p + ylab("Percent") + xlab("Outcome")
p <- p + scale_x_discrete(breaks=factor(1:4), labels=c("CR","PR","SD","PD"))
p <- p + scale_fill_manual(values=c("black","red"), name = "Response", 
         labels = c("Active", "Placebo")) 
# although labels is redundant if you aren't changing its value
p

0
ggplot(data=df1, aes(x=Response, y=percent, fill=treatment, order=treatment)) + 
  geom_bar(stat="identity", position=position_dodge()) + 
  ylab("Percent") + xlab("Outcome") +
  scale_x_discrete(breaks=factor(1:4), labels=c("CR","PR","SD","PD")) +
  scale_fill_manual(values=c("black","red"))

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接