Измените метки в facet_grid на существующем объекте ggplot2 - PullRequest
1 голос
/ 08 мая 2020

Предположим, у нас есть следующий набор данных:

d = data.frame(
  y = rnorm(100),
  x = rnorm(100),
  f1 = sample(c("A", "B"), size=100, replace=T)
)

И я хочу построить данные с использованием фасетов:

require(ggplot2)
plot = ggplot(d, aes(x,y)) +
  facet_grid(~f1, labeller = labeller(.cols=label_both))

Теперь давайте предположим, что я хочу использовать все столбцы с заглавной буквы. Это тривиально сделать с переменными x / y:

plot + labs(x="X", y="Y")

Но как мне go использовать заглавные буквы в метках фасетов?

Очевидные решения:

  1. Просто измените имя переменной (например, d$F1 = d$f1), а затем повторно запустите код.
  2. Создайте настраиваемую этикетировочную машину, которая использует имена переменных с заглавной буквы

Однако я не могу сделать ни то, ни другое в моем текущем приложении. Я не могу изменить исходный объект ggplot; Я могу только слой (например, как я делаю с метками оси x / y) или могу напрямую изменять объект ggplot.

Итак, есть ли способ изменить метки фасетов, напрямую изменив объект ggplot или наложив его на слои?

1 Ответ

0 голосов
/ 08 мая 2020

К счастью, я смог решить свою проблему, создав свой MWE. И вместо того, чтобы держать это знание при себе, я решил поделиться им с другими (или в будущем, если я забуду, как это сделать).

объекты ggplot могут быть легко разрезаны с помощью str

В этом случае объект ggplot (plot) может быть разрезан:

str(plot)

В котором перечислены многие объекты, в том числе один под названием facet, который может быть дополнительно проанализирован:

str(plot$facet)

После некоторых проб и ошибок я нашел объект под названием plot$facet$params$cols . Теперь, используя следующий код:

names(plot$facet$params$cols) = "F1"

, я получаю желаемый результат.

...