如何为scale_alpha创建连续图例(颜色条样式)?

时间:2017-05-24 21:46:33

标签: r plot ggplot2

目前,continuous colour bar legend, guide_colorbar仅适用于scale_fillscale_colour,而不适用于scale_alpha。使用scale_alpha生成的图例属于离散类型(guide_legend)。

coloralpha映射到连续变量的小例子:

scale_color生成一个连续的颜色条类型图例:

ggplot(data = iris, aes(x = Sepal.Length, y = Sepal.Width, color = Sepal.Width)) +
  geom_point()

enter image description here

scale_alpha生成一个离散图例,尽管alpha已映射到连续变量:

ggplot(data = iris, aes(x = Sepal.Length, y = Sepal.Width, alpha = Sepal.Width)) +
  geom_point()

enter image description here

是否有某种方法可以为scale_alpha获取连续的颜色条图例?

1 个答案:

答案 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()

enter image description here

我猜你最常想用的只有一种颜色,而且那种颜色是黑色的。在该简化案例中,将highcollowcol替换为“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()

enter image description here