Изменение горизонтального расстояния между гранями (ggplot2)
ggplot2
имеет возможность изменять поля между гранью графика, используя аргумент panel.margin
в opts
. Кажется, это изменяет как горизонтальный, так и вертикальный интервал. Есть ли способ изменить расстояние горизонтальной или вертикальной, не меняя другую?
Пример с результатом и желаемым результатом:
mtcars[, c("cyl", "am", "gear")] <- lapply(mtcars[, c("cyl", "am", "gear")], as.factor)
p <- ggplot(mtcars, aes(mpg, wt, group = cyl)) +
geom_line(aes(color=cyl)) +
geom_point(aes(shape=cyl)) +
facet_grid(gear ~ am) +
theme_bw()
p + opts(panel.margin = unit(1, "lines"))
Итак, в настоящее время он выглядит так: ![enter image description here]()
Как мы можем сделать это больше похожим: ![enter image description here]()
Ответы
Ответ 1
По состоянию на 9 июля 2015 г. panel.margin.x
и panel.margin.y
, похоже, были реализованы
p <- p + theme(panel.margin.x=unit(0.5, "lines") , panel.margin.y=unit(1,"lines"))
По состоянию на 15 декабря 2016 г. panel.spacing и panel.spacing.x реализованы в версиях 3.3.2 и ggplot2 2.2.0.
p <- p + theme(panel.spacing.x=unit(0.5, "lines"),panel.spacing.y=unit(1, "lines"))
Ответ 2
Ручное решение, пока эта функция не станет доступной:
library(grid)
height <- 0.5 # Vertical spacing
aux <- 1e-5 # Auxiliary number to identify 'height' among other heights
width <- 0.1 # Desirable horizontal spacing
p <- p + theme(panel.margin = unit(height + aux, "lines"))
gtable <- ggplot_gtable(ggplot_build(p))
gtable$widths[sapply(gtable$widths, '[[', 1) == height + aux][[1]][[1]] <- width
grid.draw(gtable)
![enter image description here]()