R - 以饼图显示NA计数

时间:2018-06-14 13:45:51

标签: r pie-chart

我有以下数据集(counts):

  Letter Freq
     A  711
     B  542
     C 1268
     D  134
     E   11
     F  860
     G  745
   <NA> 1135

我想用饼图来表示这些计数。 这就是我所做的:

countfrq <- ggplot(counts, aes(x="", y=Freq, fill=Letter)) + geom_bar(stat = "identity")
countfrq + coord_polar("y", start=0) + 
    labs(x="",y="", fill="Title") +
    theme_minimal() +
    scale_fill_manual(labels=c("A","B","C","D","E","F","G","Missing"), values=c("#D73027" ,"#F46D43" ,"#FDAE61" ,"#FEE08B", "#D9EF8B", "#A6D96A", "#66BD63", "#1A9850")) + theme(panel.grid=element_blank(),axis.text.x=element_blank(),legend.title=element_text(hjust=0.5,face="bold",size=16),legend.text=element_text(size=14))

这是我获得的:

enter image description here

由于我没有使用白色作为颜色,因此确认缺少代表缺失值(NA)的部分。我可以在代码或数据框中更改哪些内容以包含缺少的数据?

1 个答案:

答案 0 :(得分:0)

我有一个问题,它是一个因子变量,它会吐出相同的错误,所以我将counts$Letter转换为一个字符类。让我们首先重现这个问题:

library(ggplot2)
counts <- data.frame(Letter = c(LETTERS[1:7], NA),
                     Freq = c(711, 542, 168, 124, 11, 860, 745, 1135))
cols8 <- c("#D73027" ,"#F46D43" ,"#FDAE61" ,"#FEE08B", "#D9EF8B", "#A6D96A", "#66BD63", "#1A9850")

ggplot(counts, aes(x="", y=Freq, fill=Letter)) + 
  geom_bar(stat = "identity") +
  coord_polar("y", start=0) + 
  labs(x="",y="",  fill="Title") +
  theme_minimal() +
  scale_fill_manual(values=cols8) + 
  theme(panel.grid=element_blank(),
        axis.text.x=element_blank(),
        legend.title=element_text(hjust=0.5,face="bold",size=16),
        legend.text=element_text(size=14))

enter image description here

现在要把它变成白色,我们只是重新编码NA以获得一些价值。请记住还要转换为字符类,因为因素不会将NA存储为唯一级别。

counts$Letter <- as.character(counts$Letter)
counts$Letter[is.na(counts$Letter)] <- "Missing"

ggplot(counts, aes(x="", y=Freq, fill=Letter)) + 
  geom_bar(stat = "identity") +
  coord_polar("y", start=0) + 
  labs(x="",y="",  fill="Title") +
  theme_minimal() +
  scale_fill_manual(values=cols8) + 
  theme(panel.grid=element_blank(),
        axis.text.x=element_blank(),
        legend.title=element_text(hjust=0.5,face="bold",size=16),
        legend.text=element_text(size=14))

enter image description here