【发布时间】:2012-12-22 04:42:30
【问题描述】:
假设我创建了一个情节:
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 中的什么位置。
附:我见过这个问题:How to extract the fill colours from a ggplot object?。但是对于我正在尝试做的事情,我无法构建情节。我需要在它建成之前得到颜色。
如果有某种方法可以递归搜索p 中的字符“red”或“green”,这可能有助于找到这些值。
编辑:我最终想要做什么。
我正在尝试在绘图之前对其进行编辑。这个想法是给定一些情节p 你可以做这样的事情:
apply_theme(p)
...颜色方案应用于整个绘图(包括比例、渐变等)。这是为了避免必须执行以下操作:
p + some_theme + scales_colour_manual(values = plot_theme)
我试图减少用户的工作量,以便他们可以将主题应用于整个情节,而不必担心他们是否正在为渐变、离散比例或其他内容着色。
构建情节是部分解决方案。但我希望能够应用主题并且以后仍然能够编辑情节。
我已经能够编辑p 以便追溯应用到几何图形的任何颜色。但我就是找不到如何用刻度颜色来做到这一点。我知道颜色一定在某处!
【问题讨论】:
-
对不起,我刚刚看到你无法构建情节。因此,我删除了我的答案。你能解释一下为什么不能选择构建情节吗?
-
@Roland 添加了编辑。也许我的做法完全错误。