Расщепление легенды в ggtree/ggplot2
Я использую часть программного обеспечения под названием ggtree
, который основан на ggplot2
и позволяет визуализировать филогенетическое дерево и добавлять к нему метаданные. Функция для добавления метаданных в виде цветной тепловой карты называется gheatmap
и, насколько я понимаю, это просто соотносит имена строк в data.frame или матрице с метками дерева. Остальной язык, связанный с ним, в основном ggplot2
,
Данные здесь: https://github.com/CJREID/gheatmap
С помощью следующего кода я сгенерировал следующее изображение.
library(ggtree)
#read in tree
tree <- read.tree("example_tree_overflow.tree")
p <- ggtree(tree)
#add tip labels and scale
p <- p + geom_tiplab(size = 2.4, align = TRUE, linesize = .2) +
geom_treescale()
#group and colour clades
p <- p %>% groupClade(node=c(72,75,84)) + aes(color=group) +
scale_color_discrete() +
theme(legend.position = NULL)
#import data.frame and add column names
meta <- read.csv("metadata_overflow.csv", stringsAsFactors = TRUE)
rownames(meta) <- meta[,1]
meta <- meta[,2:7]
colnames(meta) <- c("Origin", "Syndrome", "fimH", "CTX-M","gyrA","parC")
#variable to generate the breaks in the legend
q1 <- c("REF","SAN","OBH","CoH",
"Cystitis","Pyelonephritis","Sepsis",
"H22","H30","H41",
"CTX-M-1_15","CTX-M-9_18","CTX-M-9_27",
"WT","S83L", "S83L_D87N",
"WT","S80I_E84V")
#colour values for the legend, sorry they're awful, I will fix them later
c1 <- c("black","blue","green","red",
"yellow","purple","firebrick",
"turquoise","purple","olivedrab",
"red","purple","turquoise",
"white","purple","turquoise",
"white", "turquoise")
#assign breaks to colours
names(c1) <- q1
#draw heatmap next to tree, assigning colours correctly to the variables
gheatmap(p, meta, colnames_position = "top", width = .06, offset = .025,
font.size = 2, colnames_angle = 50, colnames_offset_y = .2,
colnames_offset_x = -0.0019, hjust = 0) +
theme(legend.title = element_text()) +
scale_fill_manual(name="Origin",
breaks=q1,
values=c1)
Как видите, данные, которые я добавил, разделены на 6 категорий. "Origin", "Syndrome", "fimH", "CTX-M", "gyrA", "parC"
Каждый со своими переменными, как показано ниже,
>plots
$Origin
[1] "REF" "SAN" "OBH" "CoH"
$Syndrome
[1] "Cystitis" "Pyelonephritis" "Sepsis"
$fimH
[1] "H22" "H30" "H41"
$`CTX-M`
[1] "CTX-M-1_15" "CTX-M-9_18" "CTX-M-9_27"
$gyrA
[1] "WT" "S83L" "S83L_D87N"
$parC
[1] "WT" "S80I_E84V".
У меня есть две основные проблемы:
Я хочу разделить эти переменные под соответствующими названиями легенды, чтобы они представляли собой шесть отдельных легенд. Как вы видите, мне удалось поставить только один заголовок "Происхождение" над всем этим. (Я пытался использовать это выше
plots
объект вместоq1
какbreaks
вscale_fill_manual
но безрезультатно)Я хочу переменную
WT
подgyrA
а такжеWT
подparC
должны рассматриваться отдельно, т. е. иметь собственные поля в легенде под соответствующими категориальными названиями.
Надеюсь, решение не так сложно, как я думаю, что это может быть
Приветствия.