尝试将每个分类列设置为不同颜色的条形图

时间:2018-08-29 21:23:42

标签: r ggplot2 bar-chart

我找到了一个很酷的Wes Anderson调色板程序包,但是在这里实际使用它失败了。我正在查看的变量(Q1)具有选项1和2。该集合中有一个NA,将对其进行绘制,但是我也希望将其删除。

//*[local-name()='message-resource' and ./*[local-name()='message' and contains(text(), 'some message substring')]]//*[local-name()='code'][contains(text(), 'edi')]

我得到的图正在工作,但是没有颜色。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

有几个问题需要解决。

使用Wes Anderson调色板

Mako所述,对fill的调用缺少了aes()的美感。

此外,OP reports的错误消息是找不到调色板wesanderson程序包包含可用调色板的列表:

names(wesanderson::wes_palettes)
 [1] "BottleRocket1"  "BottleRocket2"  "Rushmore1"      "Rushmore"       "Royal1"         "Royal2"         "Zissou1"       
 [8] "Darjeeling1"    "Darjeeling2"    "Chevalier1"     "FantasticFox1"  "Moonrise1"      "Moonrise2"      "Moonrise3"     
[15] "Cavalcanti1"    "GrandBudapest1" "GrandBudapest2" "IsleofDogs1"    "IsleofDogs2"

OP的代码中没有要求称为"GrandBudapest"的调色板。相反,我们必须在"GrandBudapest1""GrandBudapest2"之间进行选择。

此外,帮助文件help("wes_palette")列出了可用的调色板。

这是一个工作示例,该示例使用在下面的数据部分中创建的伪数据:

library(ggplot2)
library(wesanderson)
ggplot(RA_Survey, aes(x = Q1, fill = Q1)) +
  geom_bar() + 
  scale_fill_manual(values=wes_palette(n=2, name="GrandBudapest1"))

enter image description here

删除NA

OP要求从集合中删除NA。有两种选择:

  1. 告诉ggplot()删除NA。
  2. 通过过滤从te数据中删除NA。

在绘制x轴时,我们可以告诉ggplot()除去NA:

library(ggplot2)
library(wesanderson)
ggplot(RA_Survey, aes(x = Q1, fill = Q1)) +
  geom_bar() + 
  scale_fill_manual(values=wes_palette(n=2, name="GrandBudapest1")) +
  scale_x_discrete(na.translate = FALSE)

enter image description here

注意,这会生成一条警告消息已删除3行,其中包含非限定值(stat_count)。要消除此消息,我们可以使用geom_bar(na.rm = TRUE)

另一个选项是通过过滤从数据中删除NAs

library(dplyr)
library(ggplot2)
library(wesanderson)
ggplot(RA_Survey %>% filter(!is.na(Q1)), aes(x = Q1, fill = Q1)) +
  geom_bar() + 
  scale_fill_manual(values=wes_palette(n=2, name="GrandBudapest1"))

创建完全相同的图表。

数据

由于OP没有提供示例数据集,因此我们需要创建自己的数据集:

library(dplyr)
set.seed(123L)
RA_Survey <- data_frame(Q1 = sample(c("1", "2", NA), 20, TRUE, c(3, 6, 1)))
RA_Survey
# A tibble: 20 x 1
   Q1   
   <chr>
 1 2    
 2 1    
 3 2    
 4 1    
 5 NA   
 6 2    
 7 2    
 8 1    
 9 2    
10 2    
11 NA   
12 2    
13 1    
14 2    
15 2    
16 1    
17 2    
18 2    
19 2    
20 NA