Скажем, я создаю сюжет:
df <- data.frame(A = 1:100, B = jitter(1:100, 25), C = c('One', 'Two'))
p <- ggplot(df, aes(A, B, colour = C)) +
geom_point() +
scale_colour_manual(values = c('red', 'green'))
Где хранятся эти цвета (красный и зеленый) в p
?
Здесь я вижу палитру функций, используемых в функции:
p$scales$scales[[1]]$palette
Содержимое этой функции:
function (n)
{
if (n > length(values)) {
stop("Insufficient values in manual scale. ", n, " needed but only ",
length(values), " provided.", call. = FALSE)
}
values
}
Я думаю, что цвета должны храниться в values
, но я понятия не имею, где они на самом деле находятся в p
.
P.S. Я видел этот вопрос: Как извлечь заливку цвета из объекта ggplot?. Но для того, что я пытаюсь сделать, я не могу построить сюжет. Мне нужно получить цвета, прежде чем он будет построен.
Если бы был какой-то способ рекурсивного поиска p
символов «красный» или «зеленый», это, вероятно, помогло бы найти эти значения.
РЕДАКТИРОВАТЬ: Что я в конечном итоге пытаюсь сделать.
Я пытаюсь редактировать графики до того, как они будут построены. Идея заключалась в том, что с заданным сюжетом p
вы можете просто сделать что-то вроде этого:
apply_theme(p)
...и цветовая схема применяется ко всему графику (включая масштабы, градиенты и т. д.). Это делается для того, чтобы не делать такие вещи, как:
p + some_theme + scales_colour_manual(values = plot_theme)
Я пытаюсь уменьшить усилия пользователя, чтобы он мог просто применить тему ко всему сюжету и не беспокоиться о том, раскрашивают ли они градиент, дискретную шкалу или что-то еще.
Строительство участка является частичным решением. Но я хотел бы иметь возможность применить тему и по-прежнему иметь возможность редактировать сюжет позже.
Я смог отредактировать p
так, чтобы любые цвета применялись к геометрии задним числом. Но я просто не могу найти, как это сделать с цветами шкалы. Я знаю, что цвета должны быть где-то там!