如何创建一个连续的图例(颜色条样式)来表示scale_alpha?

9
目前,只有使用 scale_fillscale_colour 才可以得到一个连续的颜色条例图,即 guide_colorbar,而不能使用 scale_alpha 。使用 scale_alpha 生成的图例是一种离散类型(guide_legend)。
以下是使用coloralpha映射到一个连续变量的小例子:
使用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获得连续的色条图例?

进入图像描述


1
scale_alpha 可能是你正在寻找的内容。 - Simon Jackson
1
scale_alpha(或scale_alpha_continous)确实会在连续比例尺上绘制alpha值,但图例是在离散比例尺上的。我正在寻找一种方法使图例反映出所绘制的值是连续的而不是离散的。 - filups21
那么你正在使用它绘制连续数据,但图例显示的是分隔值,而你希望它具有颜色条的外观,就像 scale_colour_continuous 一样?是这样吗? - Brian
@Brian - 正确。 - filups21
2
这是一个令人惊讶的棘手问题。我正在努力回答,但显然编码不是预期的用例:Error in guides_train(scales = scales, theme = theme, guides = guides, : Guide 'colorbar' cannot be used for 'alpha'. - Brian
1个回答

8
< p > scale_alpha_continuous 的默认最小 alpha 值为 0.1,最大值为 1。我写这篇文章是基于你可能会调整最小值以获得更好的可见性,但最大值仍保持在1。

首先我将 amin 设置为默认值0.1,点的选定颜色为 highcol。然后我们使用col2rgb将RGB值创建成矩阵,并与白色混合,这个操作修改自这篇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。接着,我们再绘制另一层点,但将 colour 设置为相同的变量,并将 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”。如果您想要多种颜色,并且每种颜色的alpha由其他变量变化...那就是另一回事了,可能不是一个好主意。


编辑以添加一个坏主意!

如果您将我的解决方案中的颜色替换为填充,仍然可以将颜色用作美学。这里我使用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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接