是否可以在 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)
我想在使用 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)