В ggplot2 и facet_wrap, как удалить все поля и отступы, сохраните strip.text?
В первую очередь это может быть результатом неправильного понимания того, как panel.margin = unit(...)
работает в функции theme()
... но я не могу настроить поля в facet_wrap так, как хотелось бы. В принципе, я хочу, чтобы facet_grid выглядел так: с фасетным текстом (т.е. strip.text
) в каждом аспекте и без spcaing между каждой гранью:
(Я оставил в розовых границах, чтобы показать размеры каждой грани)
![Идеальный конечный продукт]()
Итак, вот код до сих пор.
Чтобы настроить данные и график:
library(ggplot2)
library(grid)
p <- ggplot() +
geom_bar(data = mtcars, aes(x = cyl, y = qsec), stat = 'identity') +
facet_wrap( ~ carb, ncol = 3)
mytheme <- theme_minimal() + theme(
axis.text.x = element_blank(),
axis.text.y = element_blank(),
axis.ticks = element_blank(),
axis.title = element_blank(),
panel.margin = unit(0, "lines"),
panel.border = element_rect(colour = rgb(1.0, 0, 0, 0.5), fill=NA, size=1)
)
Стандартный график
p + mytheme
![просто стандартный сюжет]()
Удаление strip.text полностью
p + mytheme + theme(strip.text = element_blank())
![no strip text]()
Добавление strip.text и вставка его
p + mytheme +
theme(strip.text = element_text(size = rel(3.0), vjust = -4.0))
![текст вставки тестовой сетки]()
Повторное включение strip.text(и увеличенного относительного размера) увеличивает вертикальный край между двумя строками. Поэтому в этот момент я не знаю, как закрыть вертикальный зазор между верхним и нижним рядами.
Слишком большая отрицательная маржа
p + mytheme +
theme(strip.text = element_text(size = rel(3.0), vjust = -4.0),
panel.margin = unit(c(-2, -2), "lines"))
![Слишком много отрицательного поля]()
Итак, как мне настроить таргетинг только на панель .margin между двумя строками?
Изменить: Дополнительная информация. Пространство между строками выглядит как strip.background
:
p + mytheme +
theme(strip.text = element_text(size = rel(3.0), vjust = -4.0),
panel.margin = unit(-1, "lines"),
strip.background = element_rect(fill = rgb(0, 1.0, 0, 0.2)))
![введите описание изображения здесь]()
Ответы
Ответ 1
Среди списка возможных аргументов theme()
есть не только panel.margin
( "margin around facet panels (unit)", см. ?theme
), но удобно, вы также можете получить доступ к одной из осей за раз, с panel.margin.x
и panel.margin.y
соответственно ( "горизонтальное/вертикальное поле вокруг панелей фасетов (unit; inherits from panel.margin)" )).
Поэтому, уменьшая маржу ниже нуля, она немного похожа на взлома, что-то вроде следующего выполнит работу (возможно, вам придется немного изменить значение - unit(-2, "lines")
):
p + theme(strip.text = element_text(size = rel(3.0), vjust = -4.0),
panel.margin.y = unit(-2, "lines"))
Если вы используете strip.text = element_blank()
, то вы, вероятно, должны использовать panel.margin.y = unit(-0.5, "lines")
.