Копирование и изменение темы по умолчанию
Я хотел бы создать новую тему для ggplot
, которая основана на theme_bw()
.
Я предполагаю, что необходимы следующие шаги (в псевдокоде):
- Сделайте копию theme_bw():
theme_new() <- theme_bw()
- Измените копию:
theme_update(axis.title.x = theme_text(family = base_family, size = base_size, vjust = 0.5))
Любые советы о том, как реализовать это, будут очень благодарны!
Изменить: @Андри, я изменил ваш ответ для своих нужд:
theme_new <- theme_set(theme_bw())
theme_new <- theme_update(axis.title.x = theme_text(family = base_family, size = base_size, vjust = 0.5))
Однако я получаю следующую ошибку:
ggplot(mtcars, aes(factor(cyl))) + geom_bar()
Ошибка в матче (gparname, names (gpars)): объект 'base_size' не найден
Изменить: 31/10/2017, ответ от @Andrie работает отлично.
R версии 3.4.1, ggplot2_2.2.1
Ответы
Ответ 1
wiki предлагает один из способов сделать это, используя modifyList
,
theme_new <- function (base_size = 12, base_family = "", ...){
modifyList (theme_bw (base_size = base_size, base_family = base_family),
list (axis.title.x = theme_text(family = base_family,
size = base_size, vjust = 0.5)))
}
Ответ 2
В вашем коде просто нужно несколько небольших изменений для работы (в основном удаление скобок и добавление скобок в нужном месте)
theme_new <- theme_set(theme_bw())
theme_new <- theme_update(
panel.background = element_rect(fill="lightblue"))
ggplot(mtcars, aes(factor(cyl))) + geom_bar()
![enter image description here]()
Ссылка:
Ответ 3
Для более новых версий, основанных на статье здесь
txt <- element_text(size = 14, colour = "black", face = "plain")
bold_txt <- element_text(size = 14, colour = "black", face = "bold")
theme_whatever <- function(base_size = 14, base_family = "Palatino")
{
theme_bw(base_size = base_size, base_family = base_family) +
theme(
legend.key = element_blank(),
strip.background = element_blank(),
text = txt,
plot.title = txt,
axis.title = txt,
axis.text = txt,
legend.title = bold_txt,
legend.text = txt )
}
Обратите внимание, что я использую txt
и txt_bold
, чтобы избежать повторного ввода одного и того же материала.
Ответ 4
Попробуйте этот:
### Set up a blank theme
theme_none <- theme(
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.background = element_blank(),
axis.title.x = element_text(colour=NA),
axis.title.y = element_blank(),
axis.text.x = element_blank(),
axis.text.y = element_blank(),
axis.line = element_blank()
#axis.ticks.length = element_blank()
)