Назначить grid.arrange для объекта
Я хочу устроить участки с grid.arrange
сделать более сложные коплоты, а затем использовать grid.arrange
объединить эти сложные коплоты. В этой задаче я использую следующее решение ( /questions/18150719/vyirovnyat-po-levomu-krayu-dva-rebra-grafa-ggplot/18150733#18150733), чтобы упорядочить участки с множественными значениями и обеспечить одинаковую ширину. Вот демонстрация кода:
library(ggplot2); library(gridExtra)
gA <- ggplotGrob(A)
gB <- ggplotGrob(B)
maxWidth = grid::unit.pmax(gA$widths[2:5], gB$widths[2:5])
gA$widths[2:5] <- as.list(maxWidth)
gB$widths[2:5] <- as.list(maxWidth)
x <- grid.arrange(gA, gB, ncol=1)
y <- grid.arrange(gA, gB, ncol=1)
grid.arrange(x, y, ncol=2)
Чтобы быть понятным в моем случае x
а также y
немного разные участки с разными значениями. я знаю grid.arrange
не возвращает график как другие функции, основанные на сетке.
1 ответ
Решение
Если вы посмотрите на исходный код grid.arrange
, it is simply a wrapper for arrangeGrob
function (..., as.table = FALSE, clip = TRUE, main = NULL, sub = NULL,
left = NULL, legend = NULL, newpage = TRUE)
{
if (newpage)
grid.newpage()
grid.draw(arrangeGrob(..., as.table = as.table, clip = clip,
main = main, sub = sub, left = left, legend = legend))
}
Следовательно
require(ggplot2);require(gridExtra)
A <- ggplot(CO2, aes(x=Plant)) + geom_bar() +coord_flip()
B <- ggplot(CO2, aes(x=Type)) + geom_bar() +coord_flip()
gA <- ggplotGrob(A)
gB <- ggplotGrob(B)
maxWidth = grid::unit.pmax(gA$widths[2:5], gB$widths[2:5])
gA$widths[2:5] <- as.list(maxWidth)
gB$widths[2:5] <- as.list(maxWidth)
x <- arrangeGrob(gA, gB, ncol=1)
y <- arrangeGrob(gA, gB, ncol=1)
grid.arrange(x, y, ncol=2)
буду работать