r - 需要在 ggplot2 中使用 viridis 进行特定着色

标签 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

最佳答案

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于2018年11月27日创建(v0.2.1)

关于r - 需要在 ggplot2 中使用 viridis 进行特定着色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53506536/

相关文章:

r - 如何在R的keras包中设置class_weight?

r - 错误条在堆积条形图中的位置不正确 (r)

r - 如何限制 viridis 色标的范围?

r - 如何在 R plotly 等值线图中使用非默认色标?

r - viridis ggplot2 颜色包不会安装,即使依赖项 = TRUE

r - 如何在 R 中将 ISO-4217-Code 转换为货币名称

替换Knitr block 评估中的 "print"函数

r - 使用带有 cURL、RCurl 和 httr 的 cookie 发布请求

r - 添加geom_area后在ggplot2中添加图例

R Shiny 的绘图颜色有条件地基于单独数据框上的值