Укажите высоту графика в plot_grid с aligment 'hv': cowplot

Я использовал команду plot_grid из cowplot, чтобы упорядочить свои сюжеты. Я использую функцию маркировки, и в этом отношении все мои графики выглядят одинаково. Однако, когда я 'hv' выравниваю некоторые графики, которые имеют очень разные пределы оси Y, например, тот, что ниже, кажется, что используется высота графика с кратчайшим диапазоном y.

размазанный участок коровьего участка hv выровнен

Если я просто "v" выровняю график, он будет выглядеть лучше в некоторых отношениях, но трудно изменить размер графика и сделать так, чтобы метки выглядели хорошо. Я бы предпочел, чтобы высота графика не учитывала метки оси x и т. Д., Как указано выше.

график с выравниванием по вертикали

Используя gtables, я могу получить желаемую ширину / высоту (ниже), но это оставляет меня без согласованных меток на всех цифры в документе. Могу ли я использовать выравнивание hv с коровьим графиком и указать, какую высоту участка использовать?

красивый сюжет, без ярлыков

library(ggplot2)
library(dplyr)
library(scales)
library(grid)
library(cowplot)

data(iris)

iris <- iris %>% mutate(Petal.Width2 = ifelse(Species == "setosa", Petal.Width * 75, Petal.Width))

p1 <- ggplot(data=iris, aes(x = factor(Species), y=Sepal.Width)) + 
  geom_bar(stat="identity") +
  labs(x = NULL, y = "Plot One") +
  scale_y_continuous(labels = percent) +
  theme(axis.text.x = element_blank(), 
        axis.title.y = element_text(vjust=1), plot.margin=unit(c(2,2,0,2),"mm"))

p2 <- ggplot(data=iris, aes(x = factor(Species), y=Petal.Width2)) + geom_bar(stat="identity") +
  labs(x = NULL, y = "Plot Two") +
  scale_y_continuous(labels = percent) +
  theme(axis.text.x = element_blank(), 
        axis.title.y = element_text(vjust=1), plot.margin=unit(c(0,2,0,2),"mm"))
p3 <- ggplot(data=iris, aes(x = factor(Species), y=Petal.Length*0+.01)) + geom_bar(stat="identity") +
  labs(x = "SPECIES", y = "The Third plot") +
  scale_y_continuous(labels = percent) +
  theme( axis.title.y = element_text(vjust=1, color="blue"), plot.margin=unit(c(0,2,0,2),"mm"),
         axis.text.x = element_text(angle = 90, hjust=1, vjust=1,face ="italic", size=10))

plot_grid(p1,p2,p3,ncol=1, align="v", labels=c("A", "B", "C"))

# https://stackoverflow.com/a/27408589/1670053
plots <- list(p1, p2, p3)
grobs = lapply(plots, ggplotGrob)
g = do.call(rbind, c(grobs, size="first"))

g$widths = do.call(unit.pmax, lapply(grobs, "[[", "widths"))
grid.newpage()
grid.draw(g)

person nofunsally    schedule 04.03.2016    source источник


Ответы (1)


это просто, как добавить ярлыки,

plots <- list(p1, p2, p3)
grobs = lapply(plots, ggplotGrob)
library(gridExtra)
g = do.call(rbind, grobs) #  uses gridExtra::rbind.gtable
panels <- g$layout[g$layout$name=="panel",]

g <- gtable::gtable_add_grob(g, lapply(LETTERS[1:nrow(panels)],
                                       textGrob, vjust=1, y=1, 
                                       gp=gpar(fontface=2)), 
                             t=panels$t, l=2)

grid.newpage()
grid.draw(g)

введите здесь описание изображения

person baptiste    schedule 05.03.2016
comment
Это выглядит здорово. Однако я получаю сообщение об ошибке: «rbind» не является экспортированным объектом из «namespace: gridExtra». Однако изменение кода с g = do.call(gridExtra::rbind, grobs) на g = do.call(rbind, c(grobs, size="first")) работает. - person nofunsally; 05.03.2016
comment
Мне трудно настроить положение меток, когда я изменяю vjust= и / или y= , кажется, что метки не меняют свое положение. - person nofunsally; 05.03.2016
comment
1) у меня плохо, теперь должно работать; 2) странно, y = 0,5 должно вывести их на середину панели сюжета (по вертикали) - person baptiste; 05.03.2016
comment
Ошибка: 'rbind.gtable' не является экспортированным объектом из 'namespace: gridExtra' - person nofunsally; 06.03.2016
comment
у вас наверняка старая версия gridExtra - person baptiste; 06.03.2016