如何使用geom_bar为没有值的因子绘制空条?

时间:2018-04-30 15:30:41

标签: r ggplot2

请参阅以下2 data.frames

df1 <- data.frame(var=letters[1:3],val=1:3)
df2 <- df1[-1,]

请注意,vardata.frames中的一个因素,而c中的df2$var水平位于df2$var # [1] b c # Levels: a b c

library
library(dplyr)
bind_rows(df1,df2,.id = "id") %>%
  ggplot(aes(1,val,fill=var)) +
    geom_bar(stat="identity",position="fill") +
    facet_wrap(~id)

如果我使用刻面,我会让我的酒吧充满预期的颜色:

ggplot(df1,aes(1,val,fill=var)) + geom_bar(stat="identity",position="fill")
ggplot(df2,aes(1,val,fill=var)) + geom_bar(stat="identity",position="fill")

(抱歉,我目前无法上传图表)

但如果我想做两个单独的情节,我就不能保持相同的颜色主题。

p

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

只需创建一个手动调色板,并告诉您的比例不要丢失缺失因子水平。

另请注意,geom_bar(position = "identity")geom_col()相同;不妨用更短的记谱法。

library(ggplot2)

df1 <- data.frame(var=letters[1:3],val=1:3)
df2 <- df1[-1,]

pal <- c(a = "blue", b = "red", c = "gold")

ggplot(df1, aes(x = 1, y = val, fill = var)) +
    geom_col(position = "fill") +
    scale_fill_manual(values = pal, drop = F)

ggplot(df2, aes(x = 1, y = val, fill = var)) +
    geom_col(position = "fill") +
    scale_fill_manual(values = pal, drop = F)

reprex package(v0.2.0)创建于2018-04-30。