R语言 在'ggplot2::ggplot()'中同时为背景中的框和阴影区域手动设置颜色

vc9ivgsu  于 2023-10-13  发布在  其他
关注(0)|答案(1)|浏览(124)

我正在尝试手动为ggplot2::ggplot()箱线图指定颜色。使用ggplot2::geom_rect()函数,我知道如何手动为框指定颜色,我还知道如何手动为其他类型的图(如散点图)的背景中的阴影区域指定颜色。我不知道如何为箱线图的背景中的阴影区域手动分配颜色(当我尝试这样做时,它似乎会自动将颜色分配给盒子,而不是我想要着色的背景区域),我也不知道如何同时手动将颜色分配给盒子和背景中的阴影区域。
这是一些捏造的数据

Data_Frame <- data.frame(Group_1 = rep(rep(letters[1:2], each = 5), 5), Group_2 = as.character(c(rep(1, 20), rep(2, 30))), Group_3 = rep(rep(LETTERS[1:5], each = 10), length.out = 50), Response_Variable = rnorm(50))
Group_1_Colors <- data.frame(Group_1 = letters[1:2], Group_1_Color = c('red4', 'blue4'))
Group_2_Colors <- data.frame(Group_2 = as.character(1:2), Group_2_Color = c('yellow1', 'purple1'))
Group_2_Colors$Minimum_Horizontal_Cutoff_Value <- c(-Inf, 2.5)
Group_2_Colors$Maximum_Horizontal_Cutoff_Value <- c(2.5, Inf)
Final_Data_Frame <- merge(Data_Frame, Group_2_Colors, by = 'Group_2', all = T)
Final_Data_Frame <- merge(Final_Data_Frame, Group_1_Colors, by = 'Group_1', all = T)

首先,我们要把包裹装上。

if (!require (ggplot2)) {
  install.packages('ggplot2')
}
library(ggplot2)

这是一个图,我已经手动分配颜色的方块,我已经阴影区的背景下,另一个变量。

ggplot2::ggplot(Final_Data_Frame, ggplot2::aes(x = Group_3, y = Response_Variable, fill = Group_1)) +
  ggplot2::geom_boxplot() +
  ggplot2::scale_fill_manual(values = Group_1_Colors$Group_1_Color) +
  ggplot2::geom_rect(ggplot2::aes(xmin = Minimum_Horizontal_Cutoff_Value, xmax = Maximum_Horizontal_Cutoff_Value, ymin = -Inf, ymax = Inf), alpha = 0.009)

当我第二次尝试使用'ggplot 2::geom_rect()'函数手动为背景中的阴影区域着色时,它会覆盖先前分配给框的颜色,并使用这些颜色为框着色。

ggplot2::ggplot(Final_Data_Frame, ggplot2::aes(x = Group_3, y = Response_Variable, fill = Group_1)) +
  ggplot2::geom_boxplot() +
  ggplot2::scale_fill_manual(values = Group_1_Colors$Group_1_Color) +
  ggplot2::geom_rect(ggplot2::aes(xmin = Minimum_Horizontal_Cutoff_Value, xmax = Maximum_Horizontal_Cutoff_Value, ymin = -Inf, ymax = Inf), alpha = 0.009) +
  ggplot2::scale_fill_manual(values = Group_2_Colors$Group_2_Color)

有什么解决办法吗?This question看起来会有帮助,但我还是想不通。即使我在前一句中链接到的问题有所帮助,我也不认为可以将图例分为两组,Group_2Group_3,这是我希望手动着色的两个单独的组;我也想打破这两个团体的传说。
谢谢你,谢谢

u0njafvf

u0njafvf1#

您可以使用ggnewscale包轻松获得矩形的单独图例,该包允许为相同的美学提供多个比例和图例。
注意:还请注意,恕我直言,使用一个单独的数据框作为背景矩形会更容易。将所有信息放在一个数据框中会产生一个副作用,即您正在绘制多个矩形,这也是您必须设置一个非常小的alpha值的原因。

library(ggplot2)

ggplot(
  Final_Data_Frame,
  aes(
    x = Group_3, y = Response_Variable,
    fill = Group_1
  )
) +
  geom_boxplot() +
  scale_fill_manual(
    values = Group_1_Colors$Group_1_Color
  ) +
  ggnewscale::new_scale_fill() +
  geom_rect(
    data = Group_2_Colors,
    aes(
      xmin = Minimum_Horizontal_Cutoff_Value,
      xmax = Maximum_Horizontal_Cutoff_Value,
      ymin = -Inf, ymax = Inf,
      fill = factor(Group_2)
    ),
    alpha = 0.2,
    inherit.aes = FALSE
  ) +
  scale_fill_manual(
    values = Group_2_Colors$Group_2_Color,
    name = "Group_2"
  )

相关问题