需要在带有ggirid的ggplot2中进行特定的着色

时间:2018-11-27 19:08:14

标签: r ggplot2 viridis

在这种情况下,我正在生成包含20多个条目的复杂的堆叠条形图。但是,在下游通常减少到只有5或6个条目。我想使用下游集合中的颜色,然后将它们带回到更复杂的样本中。

基本上,我希望最终集中没有的任何东西都被涂成灰色。我目前不知道该怎么做。

另一个问题是下游数据不一定具有与上游数据相同的形状。就上下文而言,这是一组复杂的16S生物测序数据以及纯DNA测序和分类。

我目前的想法是以某种方式直接将颜色分配给特定的值,但是我不完全确定如何执行此操作以及如何确定viridis向下游显示的颜色。

编辑:这些数据集应该在某种程度上表明我的追求:

第一套

 SampleID Abundance
 A 0.083
 B 0.083
 C 0.083
 D 0.083
 E 0.083
 F 0.083
 G 0.083
 H 0.083
 I 0.083
 J 0.083
 K 0.083
 L 0.083

下游设置

SampleID Abundance
A 0.25
E 0.25
I 0.25
J 0.25

在这种情况下,我希望A,E,I和J具有一致的颜色,而其他字母为灰色。我还希望将所有彩色条目堆叠在一起,然后将灰色放在顶部。我猜的另一个选择是返回并删除所有非条目,然后添加一个星号,表示“在下游找不到缺失的区域。”

Edit2:原始数据和下游数据的模型预期输出

Example output

1 个答案:

答案 0 :(得分:3)

library(tidyverse)
library(viridis)
#> Loading required package: viridisLite

first <- tribble(~SampleID, ~Abundance,
                 "A", 0.083,
                 "B", 0.083,
                 "C", 0.083,
                 "D", 0.083,
                 "E", 0.083,
                 "F", 0.083,
                 "G", 0.083,
                 "H", 0.083,
                 "I", 0.083,
                 "J", 0.083,
                 "K", 0.083,
                 "L", 0.083) %>% 
  mutate(Class = "First")

downstream <- tribble(~SampleID, ~Abundance,
                      "A", 0.25,
                      "E", 0.25,
                      "I", 0.25,
                      "J", 0.25) %>% 
  mutate(Class = "Downstream")

pal <- viridis(4)

maps <- tibble(labels = LETTERS[1:12],
       colors = case_when(labels == "A" ~ pal[1],
                          labels == "E" ~ pal[2],
                          labels == "I" ~ pal[3],
                          labels == "J" ~ pal[4],
                          TRUE ~ "Grey50")) %>% 
  mutate(order = ifelse(colors == "Grey50", 2, 1)) %>% 
  arrange(order, labels)

values <- set_names(maps$colors, maps$labels)

plot_data <- bind_rows(first, downstream) %>% 
  mutate(SampleID = factor(SampleID, maps$labels),
         Class = factor(Class, c("First","Downstream"))) %>% 
  arrange(Class, SampleID)

ggplot(plot_data, aes(x = Class, y = Abundance, fill = SampleID, group = Class)) +
  geom_col() +
  scale_fill_manual("Legend", values = values, breaks = LETTERS[1:12])

reprex package(v0.2.1)于2018-11-27创建