是否可以在 ggplot2 中使用自定义调色板?

Is it possible to usa a custom-defined palette in ggplot2?

我想在使用 ggplot2 绘制图形时使用自定义调色板。我仅举一个用 viridis 制作的例子:

library(ggplot2)
library(viridis)

ggplot(data.frame(x = rnorm(10000), y = rnorm(10000)), aes(x = x, y = y)) +
  geom_hex() + coord_fixed() +
  scale_fill_viridis() + theme_bw()

我的想法是使用以下调色板:

palette <- c("#771C19", "#AA3929", "#E25033", "#F27314", "#F8A31B", 
              "#E2C59F", "#B6C5CC", "#8E9CA3", "#556670", "#000000")

library(scales)
show_col(palette)

我应该使用 scale_colour_manual(values = palette),但它看起来不像是我自定义的。我做错了什么?

library(ggplot2)
ggplot(data.frame(x = rnorm(10000), y = rnorm(10000)), aes(x = x, y = y)) +
  geom_hex() + coord_fixed() +
  scale_colour_manual(values = palette) + theme_bw()

问题是您使用的 scale_color_manual 仅适用于映射到 color aes 的离散变量。由于您有一个映射到 fill aes 上的连续变量,因此一种选择是使用 scale_fill_gradientn:

set.seed(123)

library(ggplot2)

palette <- c(
  "#771C19", "#AA3929", "#E25033", "#F27314", "#F8A31B",
  "#E2C59F", "#B6C5CC", "#8E9CA3", "#556670", "#000000"
)

ggplot(data.frame(x = rnorm(10000), y = rnorm(10000)), aes(x = x, y = y)) +
  geom_hex() +
  coord_fixed() +
  scale_fill_gradientn(colors = palette)