ggplot2: привяжите 2 тепловые карты и добавьте блок фрейма данных в углу - PullRequest
0 голосов
/ 29 мая 2020

Здравствуйте, я сделал две тепловые карты с кодом:

Я создаю первую тепловую карту

heatmap1<-ggplot(mod_mat_constraint, aes(x=Categorie, y=label)) + 
  geom_tile(aes(fill=Value)) + scale_fill_manual(values = c("#86d65e","#404040","#86d65e","#40c5e8","#e84a4a","#86d65e","#404040","#e2e2e2"), breaks=label_text) 

Я создаю вторую тепловую карту

heatmap2<-ggplot(mod_mat_gen_env, aes(x=Categorie, y=label)) + 
  geom_tile(aes(fill=Value)) + scale_fill_manual(values = c("#86d65e","#404040","#86d65e","#40c5e8","#e84a4a","#86d65e","#404040","#e2e2e2"), breaks=label_text)

и добавляю их с деревом с:

heatmap2 %>% insert_left(tree) %>% insert_right(heatmap1, width=.5)

, что дает мне:

enter image description here

, и я задавался вопросом, есть ли способ с ggplot2 для добавьте дополнительное поле df в правом углу, например:

enter image description here

из фрейма данных с именем DF1

COL1 COL2  COL3
0.1  Peter USA

большое спасибо много за ваше время и помощь

1 Ответ

0 голосов
/ 29 мая 2020

Трудно помочь точно без набора данных, но чтобы получить таблицу, наложенную на ваш график, вероятно, лучшим способом было бы использовать annotation_custom() с tableGrob() из пакета gridExtra.

Вот пример тепловой карты , взятой прямо из галереи R Graph , которую я использовал для добавления в вашу таблицу в качестве гроба.

# Library
library(ggplot2)
library(gridExtra)

# Dummy data
x <- LETTERS[1:20]
y <- paste0("var", seq(1,20))
data <- expand.grid(X=x, Y=y)
data$Z <- runif(400, 0, 5)

# Heatmap 
p <- ggplot(data, aes(X, Y, fill= Z)) + 
  geom_tile()

df <- data.frame(COL1=0.1,COL2='Peter',COL3='USA')

# adding the table
p + coord_cartesian(clip='off') +
  theme(plot.margin = margin(r=140)) +
  annotation_custom(
    grob=tableGrob(df, theme=ttheme_default(base_size = 7)),
    xmin=20, xmax=27, ymin=1, ymax=5
  )

enter image description here

Вероятно, вы можете использовать аналогичный подход в вашем случае. Обратите внимание на несколько вещей, которые мне пришлось сделать здесь, чтобы заставить это работать:

  • добавьте grob как annotation_custom(). Вам нужно будет поиграть с позиционированием ... просто поиграйте с этими числами. Также обратите внимание, что вы можете захотеть поиграть с базовым размером, чтобы убедиться, что таблица имеет правильное соотношение сторон по сравнению с вашим графиком.

  • Увеличьте границы участка, чтобы у вас была недвижимость на этом сторона, чтобы включить таблицу.

  • Отключите обрезку, чтобы вы могли правильно видеть объекты за пределами области графика.

...