2014-12-10 3 views
8

При попытке применить пользовательские сделал тему, используя ggplot2 это получаю сообщение об ошибке, как:Как сделать пользовательский по умолчанию тему с ggplot2 в R

Error in FUN("text"[[1L]], ...) : 
    Theme element 'text' has NULL property: family, face, size, hjust, vjust, angle, lineheight 

Я думаю, что я должен пропустить что-то основное здесь (моя первая попытка при создании пользовательских тем). Тема была создана на основе theme_bw():

theme_new <- function(base_size = 12, base_family = "Helvetica"){ 
    theme_bw(base_size = base_size, base_family = base_family) %+replace% 
    theme(
     line = element_line(colour="black"), 
     text = element_text(colour="black"), 
     axis.title = element_text(size = 14), 
     axis.text = element_text(colour="black", size=8), 
     strip.text = element_text(size=12), 
     legend.key=element_rect(colour=NA, fill =NA), 
     panel.grid = element_blank(), 
     panel.border = element_rect(fill = NA, colour = "black", size=1), 
     panel.background = element_rect(fill = "white", colour = "black"), 
     strip.background = element_rect(fill = NA) 
     ) 
    } 

Тогда попробуйте это:

х < - RNorm (10)

theme_set (theme_new())

qplot (х)

Получите вышеуказанную ошибку!

Однако:

theme_set (theme_bw())

qplot (х)

отлично работает!

Я думаю, что theme_update, описанный в this stackoverflow post, не совпадает с изменением темы по умолчанию с theme_set(). Если мы посмотрим на новые темы в этой виньетке (http://docs.ggplot2.org/dev/vignettes/themes.html), я понимаю, что нужно просто указать все параметры темы и использовать complete=TRUE, чтобы сказать это; ИЛИ используйте оператор %+replace%, чтобы добавить что-то к старой теме, например theme_bw(). Не поймите это!

ответ

7

Краткий проблеск над http://docs.ggplot2.org/dev/vignettes/themes.html показывает

Таким образом, при использовании% + заменить% оператор, чтобы создать новую функцию темы, вы должны быть очень осторожны, о замене элементов темы на вершине иерархии наследования такой как текст, строка и прямоугольник.

...

Обратите внимание, что тема элементы заменены в theme_bw в основном имеют NULL свойства в theme_grey(), так как большинство свойств по умолчанию в последних определяются в элементах Rect, линии и текст и передаются в их дочерние элементы. Оператор% + replace% используется для установки свойств, отличных от NULL, в выбранных элементах, указанных в теме() со всеми незаявленными свойствами, установленными в NULL.

Таким образом, вы должны закомментировать спецификации, включая line, text, rect, так как они уже были определены в родительском тем: theme_bw и theme_grey.

theme_new <- function(base_size = 12, base_family = "Helvetica"){ 
    theme_bw(base_size = base_size, base_family = base_family) %+replace% 
    theme(
     #line = element_line(colour="black"), 
     #text = element_text(colour="black"), 
     axis.title = element_text(size = 14), 
     #axis.text = element_text(colour="black", size=8), 
     #strip.text = element_text(size=12), 
     legend.key=element_rect(colour=NA, fill =NA), 
     panel.grid = element_blank(), 
     panel.border = element_rect(fill = NA, colour = "black", size=1), 
     panel.background = element_rect(fill = "white", colour = "black"), 
     strip.background = element_rect(fill = NA) 
    ) 
} 

qplot(x) + theme_new() производит следующее изображение с кучей предупреждений, связанных с шрифтами. enter image description here

Когда на другой машине было произведено практически любые участки, которые я пробовал без каких-либо предупреждений, поэтому я думаю, что это работает! Например, второй набор графиков в http://www.cookbook-r.com/Graphs/Scatterplots_(ggplot2)/ воспроизводится как enter image description here

+0

со всеми этими предупреждениями это не может быть решением. Во всяком случае, он не работает, когда вы делаете другой сюжет. – user3375672

+1

Мне любопытно узнать, какой конкретный сюжет вы не можете произвести с ним. Взгляните на отредактированную версию ответа. – Khashaa

+0

Да, это помогло удалить строки с «базовыми» настройками (хотя не совсем понятно, почему это так), и я думаю, что все предупреждения связаны с отсутствующим шрифтом Windows, который можно легко устранить. – user3375672

Смежные вопросы