Пользовательская цветовая палитра в R и ggpairs
Я пытаюсь использовать другую цветовую палитру для графиков рассеяния от ggpairs
от GGally
библиотека в R. Смотрите аналогичный вопрос здесь.
library(ggplot2)
library(GGally)
Работает
ggplot(iris, aes(x=Sepal.Width, colour=Species)) + stat_ecdf() + scale_color_brewer(palette="Spectral")
Также работает
ggplot <- function(...) ggplot2::ggplot(...) + scale_color_brewer(palette="Spectral")
ggplot(iris, aes(x=Sepal.Width, colour=Species)) + stat_ecdf()
Не работает
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')
)
но добавляя
putPlot(p, ggplot(iris, aes(x=Sepal.Length, colour=Species)) + stat_ecdf(), 1,1)
добавляет сюжет в правильных цветах.
Временное решение
Я могу изменить графики потом с помощью 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? для получения дополнительной информации.