【问题标题】:How to plot empty bars for factors with no value using geom_bar?如何使用 geom_bar 为没有值的因子绘制空条?
【发布时间】:2018-10-10 17:39:05
【问题描述】:

看到这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)

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

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

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")

我该如何解决这个问题?

【问题讨论】:

标签: r ggplot2


【解决方案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 年 4 月 30 日创建。

【讨论】:

  • 谢谢卡米尔。但是,我发现没有必要设置手动调色板。
  • 当然,这似乎是让您想要的颜色保持一致的可靠方法
猜你喜欢
  • 2015-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-26
  • 2019-04-23
相关资源
最近更新 更多