Я разрабатываю пакет, который содержит функцию построения графика, которая использует ggplot2. Я хочу изменить цвета для шкал по умолчанию, но не влияя на глобальную среду. Я назначаю новую функцию scale_colour_continuous с новым набором цветов по умолчанию.Изменение масштаба по умолчанию ggplot2 внутри функции
library(ggplot2)
dat <- data.frame(a = 1:5, b = 1:5)
home.plot <- function(x){
scale_colour_continuous <- function(...) ggplot2::scale_colour_continuous(..., low = "purple", high = "green")
ggplot(dat, aes(x = a, y = b)) + geom_point(aes(colour = a), size = 10)
}
home.plot(dat)
Это не работает, и цвета не меняются от черного и синего до фиолетового и зеленого. Я думаю, это потому, что ggplot2 ищет функцию scale_colour_continuous() вне среды функции home.plot.
Если попробовать то же самое, но в глобальной среде он работает:
scale_colour_continuous <- function(...) ggplot2::scale_colour_continuous(..., low = "purple", high = "green")
ggplot(dat, aes(x = a, y = b)) + geom_point(aes(colour = a), size = 10)
Но это изменяет поведение ggplot для всех последующих участков, а не только те, которые созданы home.plot.
Я знаю, что я могу изменить цвета после того, как объект ggplot был создан + scale_colour_continuous(), но home.plot не знает, нарисовал ли пользователь дискретную или непрерывную переменную, и поэтому мне нужно изменить поведение весов до создания объекта ggplot.
Любая помощь приветствуется.
Благодарим вас за ответ. Я бы предпочел избежать решения if else. В пакете я рисую довольно сложные сюжеты с несколькими слоями и масштабами, и они потребуют значительного количества if() s. –
«если» - это просто показать возможности, вы можете пропустить его и иметь только фиолетово-зеленый градиент – Pigeon
Прошу прощения, если неясно, чего я намереваюсь выполнить. Как я писал в сообщении выше, я знаю, что я могу изменить масштаб после создания объекта ggplot. Это недостаточно гибко, потому что я не знаю характера входных переменных в моей функции построения графика. Они могут быть числовыми векторами и факторами. –