需要在 ggplot2 中使用 viridis 进行特定着色
Need specific coloring in ggplot2 with 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 具有一致的颜色,而其他字母为灰色。我还希望将所有彩色条目堆叠在一起,然后将灰色留在顶部。我猜的另一个选择是返回并删除所有非条目,然后添加一个星号表示 "missing regions are not found downstream."
Edit2:原始数据和下游数据的模型预期输出
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
情况是这样的,我正在生成包含 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 具有一致的颜色,而其他字母为灰色。我还希望将所有彩色条目堆叠在一起,然后将灰色留在顶部。我猜的另一个选择是返回并删除所有非条目,然后添加一个星号表示 "missing regions are not found downstream."
Edit2:原始数据和下游数据的模型预期输出
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