Пользовательская цветовая палитра в R и ggpairs

Я пытаюсь использовать другую цветовую палитру для графиков рассеяния от ggpairs от GGally библиотека в R. Смотрите аналогичный вопрос здесь.

library(ggplot2)
library(GGally)

Работает

ggplot(iris, aes(x=Sepal.Width, colour=Species)) + stat_ecdf() + scale_color_brewer(palette="Spectral")

ggplot2_1

Также работает

ggplot <- function(...) ggplot2::ggplot(...) + scale_color_brewer(palette="Spectral")
ggplot(iris, aes(x=Sepal.Width, colour=Species)) + stat_ecdf()

ggplot2_2

Не работает

ggplot <- function(...) ggplot2::ggplot(...) + scale_color_brewer(palette="Spectral")

ggpairs(iris, 
    columns=, c("Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width"),
    colour='Species',
    lower=list(continuous='points'), 
    axisLabels='none',  
    upper=list(continuous='blank')
)

ggpairs1но добавляя

putPlot(p, ggplot(iris, aes(x=Sepal.Length, colour=Species)) + stat_ecdf(), 1,1)

добавляет сюжет в правильных цветах.

ggpairs2

Временное решение

Я могу изменить графики потом с помощью getPlot, но это не красиво..

subplot <- getPlot(a, 2, 1) # retrieve the top left chart
subplotNew <- subplot + scale_color_brewer(palette="Spectral")
a <- putPlot(a, subplotNew, 2, 1)

Как я могу изменить цветовую схему для точечных диаграмм в ggpairs? В частности, я бы хотел вручную определить цвета, как

scale_colour_manual(values=c("#FF0000","#000000", "#0000FF","#00FF00"))

Спасибо!

2 ответа

Вот взлом, который работает:

ggplot <- function(...) ggplot2::ggplot(...) + scale_color_brewer(palette="Spectral")
unlockBinding("ggplot",parent.env(asNamespace("GGally")))
assign("ggplot",ggplot,parent.env(asNamespace("GGally")))

Когда вы назначаете новое значение ggplot функция, это в глобальной среде. Сейчас, GGally импортирует все, включая ggplot когда он загружается (так не должно быть). В этот момент изменение ggplot функция в вашей глобальной среде не имеет никакого эффекта, потому что импорт из GGally иметь приоритет. Вместо этого вам нужно обновить ggplot функция на GGally:imports, Есть только одна проблема: после загрузки пакета его привязки блокируются. Но мы можем разблокировать их (я предполагаю, что это осуждается, поэтому маркировка решения взломать).

Смотрите ответ Джоша О'Брайена в разделе Заменить определение встроенной функции в R? для получения дополнительной информации.

Как сказал Stacksia (но также добавляя scale_fill_brewer)

ggplot <- function(...) ggplot2::ggplot(...) + scale_color_brewer(palette="Spectral") + scale_fill_brewer(palette="Spectral")
unlockBinding("ggplot",parent.env(asNamespace("GGally")))
assign("ggplot",ggplot,parent.env(asNamespace("GGally")))

Смотрите ответ Джоша О'Брайена в разделе Заменить определение встроенной функции в R? для получения дополнительной информации.

Другие вопросы по тегам