Расщепление легенды в 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".

У меня есть две основные проблемы:

  1. Я хочу разделить эти переменные под соответствующими названиями легенды, чтобы они представляли собой шесть отдельных легенд. Как вы видите, мне удалось поставить только один заголовок "Происхождение" над всем этим. (Я пытался использовать это выше plots объект вместо q1 как breaks в scale_fill_manual но безрезультатно)

  2. Я хочу переменную WT под gyrA а также WT под parC должны рассматриваться отдельно, т. е. иметь собственные поля в легенде под соответствующими категориальными названиями.

Надеюсь, решение не так сложно, как я думаю, что это может быть

Приветствия.

0 ответов

Другие вопросы по тегам