我正在try 生成一个简单的条形图,将类别映射到正值和负值.我知道类别顺序是通过ggplot2中的系数设置的,但是,类别只对小于零的值是有序的,而对于大于零的值是无序的.我无法在剧情和图例中按正确的顺序排列类别.

请考虑以下数据和曲线图:

library(ggplot2)
library(dplyr)
library(tibble)

dat <- tribble(
  ~val, ~cat, ~label, ~order,
  -10, "Negative 2", "A", 1,
  -20, "Negative 1", "A", 2,
  5, "Positive 1", "A", 3,
  10, "Positive 2", "A", 4,
  20, "Positive 3", "A", 5
) |>
  mutate(cat = factor(cat, levels = unique(cat)))

dat |> 
  ggplot(aes(x = val, 
             y = label, 
             fill = cat)) +
  geom_col(color = "transparent") +
  geom_label(aes(label = order), 
             show.legend = FALSE, 
             color = "white", 
             size = 5, 
             position = position_stack(vjust = .5)) +
  theme(legend.position = "bottom")

enter image description here

在这里,图例的顺序是正确的,但情节中的积极类别是颠倒的.订单应该是1, 2, 3, 4, 5个,而不是1, 2, 5, 4, 3个.我如何修复它才能使类别和图例都以正确的顺序排列?

推荐答案

实际上,ggplot2会将您的因素的顺序考虑在内.但是,在默认情况下,position_stack

自动按组美感的相反顺序堆叠值,对于条形图,这通常由填充美感定义.(见?position_stack)

因此,在您的例子中,顺序是5-4-3-2-1.这就是堆栈所显示的.

对于不同的条形图和正负值,获取堆栈的顺序和在右侧的图例中更复杂,我建议明确设置group AES,即在您的情况下,您可以通过根据value记录来设置堆栈的顺序,这是您的顺序所反映的,但请坚持您对fill的顺序:

library(ggplot2)
library(dplyr)
library(tibble)

dat <- tribble(
  ~val, ~cat, ~label, ~order,
  -10, "Negative 2", "A", 1,
  -20, "Negative 1", "A", 2,
  5, "Positive 1", "A", 3,
  10, "Positive 2", "A", 4,
  20, "Positive 3", "A", 5
) |>
  mutate(
    order1 = reorder(cat, -val),
    cat = factor(cat, unique(cat))
  )

dat |>
  ggplot(aes(
    x = val,
    y = label,
    fill = cat,
    group = order1
  )) +
  geom_col(color = "transparent") +
  geom_label(aes(label = order),
    show.legend = FALSE,
    color = "white",
    size = 5,
    position = position_stack(vjust = .5)
  ) +
  theme(legend.position = "bottom")

R相关问答推荐

当月份额减go 当月份额

如何删除最后一个可操作对象

如何将SAS数据集的列名和列标签同时包含在r中GT表的表首?

如何在使用箭头R包(箭头::OPEN_DATASSET)和dplyr谓词时编写具有整齐计算的函数?

观察器中的inaliateLater的位置

如何在R中使用混合GAM模型只对固定的影响因素进行适当的预测?

将列的值乘以在不同数据集中找到的值

错误包arrowR:READ_PARQUET/OPEN_DATASET&QOT;无法反序列化SARIFT:TProtocolException:超出大小限制&Quot;

为R中的16组参数生成10000个样本的有效方法是什么?

R try Catch in the loop-跳过缺少的值并创建一个DF,显示跳过的内容

在GT()中的列之间添加空格

将边列表转换为路径长度列表

列间序列生成器的功能

如何根据顺序/序列从数据框中排除值

有没有一种方法可以在pivot_longer()中 Select 最后一列,而不需要命名或给出索引号?

向量化sApply函数

Rshiny添加外部函数

根据存储在另一个数据帧中的变量名称获取相应的值?

如何在R中基于部分字符串匹配替换列名?

正确使用mclApply