Я использую ggplot и у меня есть два графика, которые я хочу отображать друг над другом. Я использовал grid.arrange
от gridExtra, чтобы складывать их. Проблема в том, что я хочу, чтобы левые края графиков выравнивались, а также правые края независимо от меток осей. (проблема возникает из-за того, что метки одного графика короткие, а другого длинные).
Вопрос:
как я могу это сделать? Я не женат на grid.arrange, но ggplot2 просто необходим.
Что я пробовал:
я попытался поиграть с шириной и высотой, а также с ncol и nrow, чтобы создать сетку 2 x 2 и разместить визуальные элементы в противоположных углах, а затем поиграть с шириной, но мне не удалось получить визуальные эффекты в противоположных углах .
require(ggplot2);require(gridExtra)
A <- ggplot(CO2, aes(x=Plant)) + geom_bar() +coord_flip()
B <- ggplot(CO2, aes(x=Type)) + geom_bar() +coord_flip()
grid.arrange(A, B, ncol=1)
Ответы:
Попробуй это,
редактировать
Вот более общее решение (работает с любым количеством графиков) с использованием модифицированной версии,
rbind.gtable
включенной вgridExtra
источник
tableGrob
.gtable::cbind
Дает мне неутешительную ошибку:nrow(x) == nrow(y) is not TRUE
. Какие-либо предложения?[2:5]
стенд?Я хотел обобщить это для любого количества сюжетов. Вот пошаговое решение с использованием подхода Батиста:
собрать ширину для каждого гроба каждого участка
используйте do.call, чтобы получить максимальную ширину
назначьте максимальную ширину для каждого гроба
участок
источник
Использование пакета cowplot :
источник
На http://rpubs.com/MarkusLoew/13295 доступно действительно простое решение (последний пункт), применяемое к этой проблеме:
вы также можете использовать это как для ширины, так и для высоты:
источник
size="first"
означает, что выравнивание будет выглядеть не очень хорошо, если второй участок больше первого,В
egg
пакете обручи ggplot объекты в стандартизированной3x3
gtable, что позволяет выравнивание сюжетных панелей между произвольным ggplots, в том числе граненых из них.источник
geom_tile
) с легендой внизу и многогранную тепловую карту (facet_grid
сgeom_tile
), но не удалось выровнять высоту третьего графика, который был дендрограммой (geom_segment
). однако, коровий заговор илиgridExtra::grid.arrange
не смогли сделать даже первое, так что пока это работает лучше всего,Вот еще одно возможное решение с использованием
melt
пакета reshape2 иfacet_wrap
:источник
Пакет patchwork обрабатывает это по умолчанию:
Создано 08.12.2019 пакетом REPEX (v0.3.0)
источник
В лучшем случае это взлом:
Хотя это действительно неправильно.
источник
Я знаю, что это старый пост, и на него уже был дан ответ, но могу ли я предложить объединить подход @baptiste с,
purrr
чтобы сделать его красивее:источник