Как я могу изменить тему по умолчанию в ggplot2? - PullRequest
8 голосов
/ 28 марта 2011

Фон

Я бы хотел изменить тему, которую использует ggplot, но мне трудно разобраться в документации и примерах theme_update().

Я использую align_plots(), чтобы разместить блокпост на графике плотности, но я обнаружил, что ни один из этих кодов не вызывал ошибку, и остался с минимальным примером. Я подозреваю, что ошибка вызвана использованием theme_blank(), но я не уверен, почему это происходит или как я могу это исправить.

Итак, я привожу минимальный воспроизводимый пример ошибки, которую я получаю:

library(ggExtra)
align.plots(qplot(1))

Но он ломается после обновления темы:

newtheme <- theme_update(axis.text.y = theme_blank(),
                         axis.line = theme_blank(),
                         axis.title.x = theme_blank(), 
                         axis.title.y = theme_blank(),
                         axis.ticks.x = theme_blank(),
                         panel.grid.major = theme_blank(),
                         panel.grid.minor = theme_blank(),
                         panel.border = theme_blank(),
                         axis.color.y = 'white')
align.plots(qplot(1))

Это дает ошибку:

Error in UseMethod("validGrob") : 
  no applicable method for 'validGrob' applied to an object of class "NULL"
In addition: Warning message:
In editThisGrob(grob, specs) : Slot 'vp' not found

Вопросы:

  1. Что вызывает эту ошибку?

  2. Где я могу получить больше информации об использовании ?theme_update()? Я получил это далеко в документации ggplot и не могу найти ответ на сайте ggplot , хотя самым близким, что я получил, был сценарий polishing.r

Примечание:

Я получаю ту же ошибку с решением, основанным на предложении Хэдли для другого вопроса.

opt <- opts(...)
align.plots(qplot(1) + opt)

где ... - содержимое theme_update() выше

Ответы [ 2 ]

7 голосов
/ 28 марта 2011

Я не знаю, почему это работает, но это работает. Просто вставьте строку theme_set(newtheme) перед вызовом align.plots.

1 голос
/ 28 марта 2011

Это можно считать ошибкой в ​​ggExtra :: align.plots ().Эта функция вычисляет размер различных элементов ggplot, таких как метка оси y и легенда, и соответствующим образом выравнивает графики, чтобы панели графиков располагались друг над другом.Если вы настроите свою тему на использование theme_blank () для некоторых из этих графических элементов, функция будет сбита с толку, поскольку базовый гроб (ggplot2 :::. ZeroGrob) не совсем похож на другие гробы.

Хотя это можетбыть исправимым (*), я думаю, вам лучше рассмотреть другие варианты:

  • используйте фиктивную переменную фасетирования, чтобы ggplot2 автоматически выровнял две панели

  • используйте gridExtra :: grid.arrange () или видовые окна простой сетки, чтобы два графика располагались друг над другом;поскольку вы удалили элементы, которые могут смещать позиции графика, проблем не должно быть.

(*): теперь исправлено, попробуйте

   source("http://ggextra.googlecode.com/svn/trunk/R/align.r")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...