【问题标题】:How to plot NA bar with ggplot2如何使用 ggplot2 绘制 NA 条
【发布时间】:2013-09-24 08:09:10
【问题描述】:

我想绘制一个条形图,其中显示男性、女性和 NA 的数量。问题是,当我添加选项 fill=gender 来为条着色时,我失去了 NA 条。我应该使用什么选项来保持 NA 栏也有颜色?

name <- c("Paul","Clare","John","What","Are","Robert","Alice","Jake")
gender <- c("male","female","male",NA,NA,"male","female","male")

df <- data.frame(name,gender)

ggplot(subset(df, gender=="male" | gender=="female" | is.na(gender)), aes(x=gender, fill=gender)) +
  geom_bar() + 
  labs(x=NULL, y="Frequency") +
  scale_fill_manual(values=c("red", "blue", "black"))

【问题讨论】:

  • 奇怪的是,如果你不添加manual,即ggplot(subset(df, gender=="male" | gender=="female" | is.na(gender)), aes(x=gender, fill=gender)) + geom_bar(),你会在图中看到NA栏。
  • 是的,我注意到了。这就是我问的原因。我想这与 ggplot 如何“填充”NA有关。

标签: r ggplot2


【解决方案1】:

我只是亲自重新编码 - 给你的观众一些比传说中的“NA”更好的东西。

# Recoding is easier with this off. When you want a factor, you'll know.
options(stringsAsFactors = FALSE)

library(ggplot2)

# Set up the data.frame
name <- c("Paul","Clare","John","What","Are","Robert","Alice","Jake")
gender <- c("male","female","male",NA,NA,"male","female","male")

df <- data.frame(name,gender)


# Convert NAs to "Unknown"
df$gender[is.na(df$gender)] <- "Unknown"



ggplot(df, aes(x=gender, fill=gender)) +
  geom_bar() + 
  labs(x=NULL, y="Frequency") +
  scale_fill_manual("Gender", values=c("red", "blue", "black"))

【讨论】:

  • 并没有真正回答我的问题。我想保留 NA 并将其显示为 bar。仍然当我添加 fill=gender 来为条着色时,我失去了 NA。
  • 以后可能会造成混淆,但您可以通过df$gender[is.na(df$gender)] &lt;- "NA" 得到您想要的。
【解决方案2】:

如果你真的必须让你的 NA 保持原样,你可以将性别作为一个不排除 NA 的因素:

# Convert to a factor, NOT excluding NA values
df$gender <- factor(df$gender, exclude = NULL)

ggplot(df, aes(x=gender, fill = gender)) +
  geom_bar(na.rm = FALSE) + 
  labs(x=NULL, y="Frequency") +
  scale_fill_manual("Gender", 
                    values=c("red", "blue", "black"))

NA 仍然没有出现在图例中 - ggplot 不希望在这里绘制 NA,这就是为什么像我在其他答案中那样重新编码它们通常更容易。不管怎样,我认为你将不得不修改你的性别变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-27
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    相关资源
    最近更新 更多