如何在ggplot2中更改具有两个因子水平的躲避条形图的顺序?

问题描述 投票:0回答:1

我在 R 中使用了一个条形图

ggplot2::geom_bar(data = data,
           mapping = ggplot2::aes(
             x = values_for_x,
             y = values_for_y,
             color = factor_levels_for_color,
             fill = factor_levels_for_color,
             alpha = factor_levels_for_alpha
           ),
           position = ggplot2::position_dodge2(
             preserve = "total"
           ),
           stat = "identity",
           linewidth = 0
         )

如您所见,我有 3 个不同的列定义了

color
fill
alpha
。 目前,我的躲避条首先按
alpha
color
排序/分组。不过,我希望先按
color
订购,然后再按
alpha
订购。

我目前正在寻找正确的位置来定义这一点。 任何帮助/提示表示赞赏!

谢谢!

更新包括。代码示例。

以下代码绘制了 ggplot。它首先按

alpha
值的级别对所有躲避的条形进行排序,然后使用
color_values
因子级别。 我想改变这个,但到目前为止还没有做到这一点。

虽然这是一个最小的示例,但我的代码手动定义了级别,并将特定的颜色或 alpha 值分配给我不想更改的某些值。

再次感谢!

data <- base::data.frame(
  x_values = rep(x = c("Treatment 1", "Treatment 2", "Treatment 3"), times = 3),
  y_values = c(5,8,7,3,7,8,3,1,5),
  alpha_values = c(1,2,3,1,2,3,1,2,3),
  group = "A",
  color_values = c("location1", "location1", "location1",
                   "location2", "location2", "location2",
                   "location3", "location3", "location3")
)

data2 <- base::data.frame(
  x_values = rep(x = c("Treatment 1", "Treatment 2", "Treatment 3"), times = 3),
  y_values = c(17,18,17,13,17,18,13,11,15),
  alpha_values = c(7,7,7,3,3,3,5,5,5),
  group = "B",
  color_values = c("location3", "location3", "location3",
                   "location1", "location1", "location1",
                   "location2", "location2", "location2")
)

data <- dplyr::bind_rows(base::list(data, data2))

data$alpha_values <- base::as.factor(data$alpha_values)
data$group <- base::as.factor(data$group)
data$color_values <- base::as.factor(data$color_values)

ggplot2::ggplot(data = data,
                mapping = ggplot2::aes(x = x_values,
                              y = y_values,
                              alpha = alpha_values,
                              fill = color_values)) +
  ggplot2::geom_bar(stat = "identity", position = ggplot2::position_dodge2())
r ggplot2 geom-bar geom
1个回答
0
投票

一种方法可能是创建一个组合颜色和 alpha 值的因子,并按照您想要的方式对其进行排序:

ggplot2::ggplot(data = data |>
                  dplyr::arrange(color_values, alpha_values) |>
                  dplyr::mutate(order = forcats::fct_inorder(paste(color_values, alpha_values))),
                mapping = ggplot2::aes(x = x_values,
                                       y = y_values,
                                       alpha = alpha_values,
                                       fill = color_values,
                                       group = order)) +
  ggplot2::geom_bar(stat = "identity", position = ggplot2::position_dodge2())

© www.soinside.com 2019 - 2024. All rights reserved.