Я пытаюсь написать несколько автоматических модульных тестов для ряда функций, которые генерируют ggplot
графику.
Например, я хочу установить для графика определенную цветовую шкалу. Теперь мне нужен способ определить, действительно ли была применена правильная цветовая шкала.
Вот пример кода, который устанавливает цвет fill
для использования палитры ColourBrewerDark2
:
p <- ggplot(mtcars, aes(x=factor(cyl), y=mpg, fill=factor(gear))) +
geom_bar(stat="identity") +
facet_grid(~gear) +
scale_fill_brewer(palette="Dark2")
print(p)
Итак, визуальный осмотр говорит мне, что код сработал.
Теперь я хочу убедиться в этом, осмотрев объект:
str(p, max.level=1)
List of 8
$ data :'data.frame': 32 obs. of 11 variables:
$ layers :List of 1
$ scales :Reference class 'Scales' [package "ggplot2"] with 1 fields
..and 20 methods, of which 9 are possibly relevant
$ mapping :List of 3
$ options :List of 1
$ coordinates:List of 1
..- attr(*, "class")= chr [1:2] "cartesian" "coord"
$ facet :List of 9
..- attr(*, "class")= chr [1:2] "grid" "facet"
$ plot_env :<environment: R_GlobalEnv>
- attr(*, "class")= chr "ggplot"
Хорошо, объект $scales
кажется интересным. Давайте рассмотрим это подробнее:
str(p$scales)
Reference class 'Scales' [package "ggplot2"] with 1 fields
$ scales:List of 1
..$ :List of 14
....$ call : language discrete_scale(aesthetics = "fill", scale_name = "brewer", palette = brewer_pal(type, palette))
....$ aesthetics: chr "fill"
....$ scale_name: chr "brewer"
....$ palette :function (n)
....$ range :Reference class 'DiscreteRange' [package "scales"] with 1 fields
......$ range: NULL
......and 14 methods, of which 3 are possibly relevant:
...... initialize, reset, train
....$ limits : NULL
....$ na.value : logi NA
....$ expand : list()
......- attr(*, "class")= chr "waiver"
....$ name : NULL
....$ breaks : list()
......- attr(*, "class")= chr "waiver"
....$ labels : list()
......- attr(*, "class")= chr "waiver"
....$ legend : NULL
....$ drop : logi TRUE
....$ guide : chr "legend"
....- attr(*, "class")= chr [1:3] "brewer" "discrete" "scale"
and 20 methods, of which 9 are possibly relevant:
add, clone, find, get_scales, has_scale, initialize, input, n, non_position_scales
Но здесь я рисую пробел. Внутри p$scales
нет ничего, что выглядело бы либо как мой ввод palette
, ни на самом деле как цвета.
Цвета, которые я ожидаю, это:
library(RColorBrewer)
brewer.pal(3, name="Dark2")
[1] "#1B9E77" "#D95F02" "#7570B3"
Как запросить объект ggplot
для использования определенных цветов заливки?