在 ggplot 块中使用 if else 来更改调色板

我希望能够根据另一个变量 data_origin 更改 ggplot2 箱线图中的调色板。

这使我的箱线图完整并带有图例:

library(hrbrthemes)
library(ggplot2)
library(reshape2)
library(tidyverse)

data_origin <- "airborne"
mytitle <- "something more than this"
legend_title <- "some words"
melted <- reshape2::melt(iris)
bp1 <- ggplot(melted,aes(x = variable,y = value,fill = Species)) + 
  geom_boxplot() +
  theme_ipsum() +
  scale_fill_brewer(palette = "Greens") +
  theme(
    legend.position = "bottom",plot.title = element_text(size = 10)) +
  theme(axis.text.x = element_blank()) +
  ggtitle(mytitle) +
  xlab("") +
  ylab("") +
  facet_wrap(~variable,scale = "free")
bp1

然而,这完全删除了图例并忽略了 if else

bp1 <- ggplot(melted,fill = Species)) + 
      geom_boxplot() +
      theme_ipsum() +
      scale_fill_brewer(legend_title,if (data_origin == "airborne" ) {palette = "Blues"} else {palette = "Greens"}) +
      theme(
        legend.position = "bottom",# legend.title = legend_title,plot.title = element_text(size = 10)) +
      theme(axis.text.x = element_blank()) +
      ggtitle(mytitle) +
      xlab("") +
      ylab("") +
      facet_wrap(~variable,scale = "free")
    bp1
lovejiazhen 回答:在 ggplot 块中使用 if else 来更改调色板

除了@stefan 建议的之外,还有两种方法可以做到这一点(我知道)。第一种是使用 ifelse()(我将相关部分移到最后):

data_origin <- "airborne"
bp1 <- ggplot(melted,aes(x = variable,y = value,fill = Species)) + 
  geom_boxplot() +
  theme_ipsum() +
  theme(
    legend.position = "bottom",# legend.title = legend_title,plot.title = element_text(size = 10)) +
  theme(axis.text.x = element_blank()) +
  ggtitle(mytitle) +
  xlab("") +
  ylab("") +
  facet_wrap(~variable,scale = "free") + 
  scale_fill_brewer(legend_title,palette = ifelse(
    data_origin == "airborne","Blues","Greens"
  ))
bp1

另一种是分两步构建情节:

data_origin <- "not airborne"
bp1 <- ggplot(melted,scale = "free")

if (data_origin == "airborne") {
  bp2 <- bp1 +
    scale_fill_brewer(legend_title,palette = "Blues")
} else {
  bp2 <- bp1 +
    scale_fill_brewer(legend_title,palette = "Greens")
}

bp2

reprex package (v2.0.0) 于 2021 年 8 月 1 日创建

本文链接:https://www.f2er.com/2278.html

大家都在问