Como extrair as colors de preenchimento de um object ggplot?

Eu estou tentando escrever alguns testes unitários automatizados para uma série de funções que gera charts ggplot .

Por exemplo, eu quero definir uma escala de colors específica para um gráfico. Agora preciso de uma maneira de determinar se a escala de colors correta foi realmente aplicada.

O fundo:

Aqui está um código de exemplo, que define a cor de fill para usar a paleta Dark2 :

 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) 

insira a descrição da imagem aqui

OK, então uma inspeção visual me diz que o código funcionou.

O que eu tentei:

Agora quero confirmar isso inspecionando o object:

 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 : - attr(*, "class")= chr "ggplot" 

Tudo bem, o object $scales parece interessante. Vamos ver isso com mais detalhes:

 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 

Mas aqui eu desenho um espaço em branco. Não há nada dentro de p$scales que se pareçam com minha palette input, ou de fato como colors.

O que eu espero encontrar:

As colors que eu esperaria são:

 library(RColorBrewer) brewer.pal(3, name="Dark2") [1] "#1B9E77" "#D95F02" "#7570B3" 

A questão:

Como faço para interrogar um object ggplot para colors de preenchimento específicas a serem usadas?