目前,continuous colour bar legend, guide_colorbar
仅适用于scale_fill
和scale_colour
,而不适用于scale_alpha
。使用scale_alpha
生成的图例属于离散类型(guide_legend
)。
color
和alpha
映射到连续变量的小例子:
scale_color
生成一个连续的颜色条类型图例:
ggplot(data = iris, aes(x = Sepal.Length, y = Sepal.Width, color = Sepal.Width)) +
geom_point()
scale_alpha
生成一个离散图例,尽管alpha
已映射到连续变量:
ggplot(data = iris, aes(x = Sepal.Length, y = Sepal.Width, alpha = Sepal.Width)) +
geom_point()
是否有某种方法可以为scale_alpha
获取连续的颜色条图例?
答案 0 :(得分:5)
scale_alpha_continuous
的默认最小alpha为0.1,最大值为1.我写了这个假设您可以将最小值调整为更明显,但是您将最大值保持为1。
首先,我将amin
设置为默认值0.1,将所选颜色设置为highcol
。然后我们使用col2rgb
制作RGB值的矩阵,并将其与白色混合,并从this answer written in C#进行修改。请注意,我们正在使用白色混合,因此您应该使用具有白色背景的主题(例如,如下所示theme_classic()
)。最后,我们将该矩阵转换为十六进制值,并将其粘贴到前面带有#
的单个字符串中,用于标准RGB格式。
require(scales)
amin <- 0.1
highcol <- hue_pal()(1) # or a color name like "blue"
lowcol.hex <- as.hexmode(round(col2rgb(highcol) * amin + 255 * (1 - amin)))
lowcol <- paste0("#", sep = "",
paste(format(lowcol.hex, width = 2), collapse = ""))
然后我们按照您可能计划的情节进行绘图,将您选择的变量设置为alpha
美学,并在此处设置一些geom_point
s。然后我们绘制另一层点,但颜色设置为同一个变量,alpha = 0
(或不可见)。这为我们提供了我们所需的色彩栏。然后我们必须将scale_colour_gradient
的范围设置为上面的颜色。
ggplot(iris, aes(Sepal.Length, Sepal.Width, alpha = Petal.Length)) +
geom_point(colour = highcol, size = 3) +
geom_point(aes(colour = Petal.Length), alpha = 0) +
scale_colour_gradient(high = highcol, low = lowcol) +
guides(alpha = F) +
labs(colour = "Alpha\nlabel") +
theme_classic()
我猜你最常想用的只有一种颜色,而且那种颜色是黑色的。在该简化案例中,将highcol
和lowcol
替换为“black”和“grey90”。如果你想拥有多种颜色,每种颜色都有一个不同的颜色变化......这是另外一种蠕虫,可能不是一个好主意。
如果您使用填充替换上面的解决方案的颜色,您仍然可以使用颜色作为审美。在这里,我使用highcol <-hue_pal()(3)[2]
来提取默认的绿色。
ggplot(aes(Sepal.Length, Sepal.Width, alpha = Petal.Length)) +
geom_point(aes(colour = Species), size = 3) +
geom_point(aes(fill = Petal.Length), alpha = 0) +
scale_fill_gradient(high = highcol, low = lowcol) +
guides(alpha = F) +
labs(fill = "Petal\nLength") +
theme_classic()