Включить руководство() в тему ggplot2

В нашей организации есть очень строгая книга стилей, поэтому мне поручили создать тему 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(), который бы это делал. Любой совет?

Спасибо!

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
251
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Операция + для объектов и списков 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) добавлять только руководства/темы/..., если они не были установлены ранее? Например, если ваш ggplot(...) + geom_bar(...) + coord_polar(...) + themes(legend.position = "top") + pie_theme(), он не будет пытаться дублировать ранее назначенное значение темы?

r2evans 23.12.2020 20:05

Ну, это, наверное, намного проще сделать ... + pie_theme + theme(legend.position = "top"), чем наоборот. Я предполагаю, что вы могли бы написать собственный класс темы с собственным методом ggplot_add(), который проверяет это, однако это будет более сложно, чем просто переключение порядка операций.

teunbrand 23.12.2020 20:11

Это то, о чем я думал. Я представлял себе общий способ, который включает в себя вещи, включенные в scale_*_*, чтобы подавить заметки/предупреждения, которые ggplot2 выдает с дублирующими вызовами/аргументами. Спасибо.

r2evans 23.12.2020 20:12

Напоминаю, что на аналогичный вопрос о условных настройках темы я отвечал здесь: stackoverflow.com/questions/58149562/…

teunbrand 23.12.2020 20:17

Другие вопросы по теме