我正在使用ggplot2 + RColorBrewer来创建一组图表。我想让我的颜色在图表之间匹配,但事实证明这是惊人的困难。
下面是一个简单的例子:
library(tidyverse)
library(ggplot2)
library(RColorBrewer)
set.seed(1)
df <- tibble(x=rnorm(600),
y = as.factor(rep(1:6, 100)))
ggplot(df, aes(x=x, y=y, fill=y)) +
stat_boxplot(alpha=.7, outlier.shape=5) +
theme_minimal() +
scale_fill_brewer(palette = "Set3")
ggsave(file="fig1.pdf", width = 210/2, height = 297/2, units = "mm")
dev.off()
ggplot(df, aes(x=x, y=y, fill=y, color=y)) +
scale_fill_brewer(palette = "Set3") +
stat_summary(fun=median, geom='point', shape=17, size=3, alpha=.7) +
theme_minimal()
ggsave(file="fig2.pdf", width = 210/2, height = 297/2, units = "mm")
生成的图1如下所示:
图2是这样的:
问题是颜色并不完全匹配。例如,图1中的组y=1是绿色,图2中的组y = 1是红色。很明显,这两张图片基于相同的调色板,但顺序不同。有没有办法强制两张图的顺序相同(我不愿意在图中硬编码颜色代码)?
1条答案
按热度按时间pu82cl6c1#
问题是
shape=17
只有color
的美感,因此必须使用scale_color_brewer
才能得到相同的颜色。注:有关
shape
s的概述以及哪一个具有color
或同时具有color
和fill
aes,请参见美学规格小插图。第二种选择是切换到
shape=24
,它同时具有color
和fill
aes。或者作为第三个选项,使用
scale_fill_brewer(palette = "Set3", aesthetics = c("fill", "color"))
将调色板同时应用于fill
和color
aes。