我实现了以下函数来绘制ggplot使用的不同颜色。它们还可以绘制图例中的十六进制颜色值。但是,不知何故,颜色和十六进制值的分配是错误的,我不明白为什么。我在将十六进制颜色添加到数据框data
之前对其进行了排序,然后将其用于ggplot2函数。我认为这样可以解决问题,但事实并非如此。我还创建了向量col
,其中包含十六进制以及我实际想要作为图例的rgb颜色值,但我也在努力使其工作
ggplot_colors <- function(n, size=8, alpha=1) {
library(grDevices)
hues = seq(15, 375, length=n+1)
cols_hex <- sort(hcl(h=hues, l=65, c=100)[1:n])
cols_rgb <- col2rgb(cols_hex)
cols_rgb <- apply(cols_rgb, 2, function(x){paste(x, collapse=",")})
cols <- paste(cols_hex, cols_rgb, sep="; ")
data <- data.frame(x=1:length(cols),
y=1:length(cols),
cols_hex=cols_hex,
cols_rgb=cols_rgb,
cols=cols)
ggplot(NULL) +
geom_point(data=data,
aes(x=x, y=y, colour=cols_hex), size=size, alpha=alpha)
}
ggplot_colors(15, 8, 1)
红色作为RGB值(248,118,109)和十六进制值F8766D在图例中分配了十六进制值00B0F6
答案 0 :(得分:9)
如果您想为参数colour=
提供颜色名称并显示此参数的图例,则应将scale_colour_identity()
添加到函数的最后一行。此比例确保提供的值将被解释为实际颜色值。在函数breaks=cols_hex
中添加参数scale()
将确保在图例中对名称进行排序。
ggplot(NULL) +
geom_point(data=data, aes(x=x, y=y, colour=cols_hex), size=size, alpha=alpha) +
scale_colour_identity(guide="legend",breaks=cols_hex)