r - 如何为scale_alpha创建连续的图例(彩条样式)?

标签 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 获得连续的颜色条图例?

最佳答案

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与“黑色”和“灰色90”。如果你想有多种颜色,每种颜色的 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

关于r - 如何为scale_alpha创建连续的图例(彩条样式)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44168996/

相关文章:

c++ - 将字符串解析为 C++ 中的一行代码

r - 按组对 df 进行子集化,遍历散点图

r - 使用 ggplot2 在 ggsci 中选择颜色

r - 合并不同大小的数据帧

R for 循环过滤并打印数据帧的列

arrays - 在 MATLAB 中使用 Line 函数在数组中循环使用不同的颜色

r - 仅更改 ggplot 中一根条的颜色

R ggplot2 : How to draw geom_points that have a solid color and a transparent stroke and are colored depending on color?

java - 如何在没有 RStudio 的情况下运行 Rshiny 小程序

r - 对列列表执行不同的函数,并使用 data.table 自动生成新的列名称