В нашей организации есть очень строгая книга стилей, поэтому мне поручили создать тему ggplot, которую программисты могут использовать, чтобы их диаграммы и графики были максимально приближены к «официальному» стилю.
Одно из требований заключается в том, чтобы легенда для графика располагалась под графиком, но располагалась вертикально, как показано ниже:
Я генерировал такую графику следующим образом:
pie_theme <- theme(
text = element_text(family = "Arial", face = "bold", size = 7, color = "black"),
plot.caption = element_text(hjust = 0, size = 6),
legend.position = "bottom",
etc.
)
p1 <- ggplot(bla bla bla)+geom_bar(bla bla bla)+coord_polar(bla bla bla)
p1+ guides(fill=guide_legend(ncol=1)) +
pie_theme
В идеале я хотел бы интегрировать команду guides() в тему, чтобы программистам не приходилось добавлять guides() каждый раз, когда они выводят диаграмму, а легенда автоматически складывается по вертикали. Но я не вижу атрибута theme(), который бы это делал. Любой совет?
Спасибо!
Операция +
для объектов и списков ggplot работает таким образом, что каждый элемент списка добавляется на график отдельно. Чтобы это работало, вы можете просто обернуть тему и руководства в список, который затем можно добавить так же, как и обычную тему.
Слово предупреждения, однако, если вы сопоставите непрерывную переменную с направляющей, она попытается выбрать guide_legend()
вместо guide_colorbar()
, что, возможно, более уместно, если вы используете ее таким образом.
library(ggplot2)
pie_theme <- list(
theme(
text = element_text(face = "bold", size = 7, color = "black"),
plot.caption = element_text(hjust = 0, size = 6),
legend.position = "bottom"
),
guides(fill = guide_legend(ncol = 1))
)
ggplot(mtcars, aes(x = factor(1), fill = factor(cyl))) +
geom_bar(width = 1) +
coord_polar(theta = "y") +
pie_theme
Created on 2020-12-23 by the reprex package (v0.3.0)
Ну, это, наверное, намного проще сделать ... + pie_theme + theme(legend.position = "top")
, чем наоборот. Я предполагаю, что вы могли бы написать собственный класс темы с собственным методом ggplot_add()
, который проверяет это, однако это будет более сложно, чем просто переключение порядка операций.
Это то, о чем я думал. Я представлял себе общий способ, который включает в себя вещи, включенные в scale_*_*
, чтобы подавить заметки/предупреждения, которые ggplot2
выдает с дублирующими вызовами/аргументами. Спасибо.
Напоминаю, что на аналогичный вопрос о условных настройках темы я отвечал здесь: stackoverflow.com/questions/58149562/…
Возможное расширение вопроса: возможно ли с помощью функции (вместо предопределенной
pie_theme
) добавлять только руководства/темы/..., если они не были установлены ранее? Например, если вашggplot(...) + geom_bar(...) + coord_polar(...) + themes(legend.position = "top") + pie_theme()
, он не будет пытаться дублировать ранее назначенное значение темы?