RColorBrewer颜色因图类型而异

11dmarpk  于 2023-03-20  发布在  其他
关注(0)|答案(1)|浏览(149)

我正在使用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是红色。很明显,这两张图片基于相同的调色板,但顺序不同。有没有办法强制两张图的顺序相同(我不愿意在图中硬编码颜色代码)?

pu82cl6c

pu82cl6c1#

问题是shape=17只有color的美感,因此必须使用scale_color_brewer才能得到相同的颜色。
注:有关shape s的概述以及哪一个具有color或同时具有colorfill aes,请参见美学规格小插图。

library(ggplot2)

set.seed(1)

df <- data.frame(
  x = rnorm(600),
  y = as.factor(rep(1:6, 100))
)

p <- ggplot(df, aes(x = x, y = y, fill = y, color = y)) +
  theme_minimal()

p +
  scale_color_brewer(palette = "Set3") +
  stat_summary(fun = median, geom = "point", shape = 17, size = 3, alpha = .7)

第二种选择是切换到shape=24,它同时具有colorfill aes。

p +
  scale_fill_brewer(palette = "Set3") +
  stat_summary(fun = median, geom = "point", shape = 24, size = 3, alpha = .7, stroke = 0)

或者作为第三个选项,使用scale_fill_brewer(palette = "Set3", aesthetics = c("fill", "color"))将调色板同时应用于fillcolor aes。

p +
  scale_fill_brewer(palette = "Set3", aesthetics = c("fill", "color")) +
  stat_summary(fun = median, geom = "point", shape = 17, size = 3, alpha = .7)

相关问题