如何在R中带有ggplot2的多因素箱图中放置不同的颜色?

时间:2019-06-04 20:37:23

标签: r ggplot2 graphics colorbrewer

我正在ggplot2中进行箱形图绘制,但是我一直无法找到一种在3 x 3因子设计中处理多种颜色的方法。

这是我能做的示例代码(用作指导thread):

library(ggplot2)

data <- data.frame(
  value = sample(1:50),
  animals = sample(c("cat","dog","zebra"), 50, replace = TRUE),
  region = sample(c("forest","desert","tundra"), 50, replace = TRUE)
)

ggplot(data, aes(animals, value)) + geom_boxplot(aes(fill = animals)) +
  facet_grid(~region) + scale_fill_brewer()

我可以将蓝色刻度用于以下类别:沙漠,森林和苔原。您可以看到输出here

但是,我想为此类别中的每一个使用不同的色标。例如:甜品用黄色标度,森林用绿色标度,苔原用蓝色标度。谢谢!

2 个答案:

答案 0 :(得分:1)

最简单的方法是使用alpha作为透明度,如可能的欺骗所建议的那样。为箱图绘制一个漂亮的图例有点不同,这是一个可行的示例。 (不过,由于它们具有x标签,您可能只需将guide = FALSE设置为alpha比例即可。)

ggplot(data, aes(animals, value)) + 
  geom_boxplot(aes(fill = region, alpha = animals)) +
  facet_grid( ~ region) +
  scale_alpha_discrete(
     range = c(0.3, 0.9),
     guide = guide_legend(override.aes = list(fill = "black"))) +
  scale_fill_manual(values = c("goldenrod2", "forestgreen", "dodgerblue4"))

enter image description here

答案 1 :(得分:0)

您可以通过数据操作以不太优雅的方式进行操作。

library(ggplot2)
library(dplyr)

data <- data.frame(value = sample(1:50),
                   animals = sample(c("cat","dog","zebra"), 50, replace = TRUE),
                   region = sample(c("forest","desert","tundra"), 50, replace = TRUE))

data <- data %>% 
  dplyr::mutate(fill = paste(animals, "-", region))

ggplot(data, aes(animals, value)) + 
  geom_boxplot(aes(fill = fill), col  = "black", show.legend = F) +
  facet_grid(~region) +
  scale_fill_manual(values = c("gold3", "green3", "blue",
                               "yellow", "green4",  "blue4",
                               "goldenrod", 'greenyellow', "dodgerblue2"))

enter image description here