繁体   English   中英

使用填充在 geom_bar 中未对齐的条形

[英]misaligned bars in geom_bar using fill

我对 ggplot 的 geom_bar 有问题。

我有几个从几个变量呈现的条形图,它们都使用相同的第四个变量作为填充: 使用“队列”作为“填充”的三个堆叠条形图。在一个条形图中,队列 2 的条形未对齐。

出于某种原因,在第三张图表中,队列 2 的列未对齐。 所有三个图表都使用相同的数据集和相同的代码。

library(tidyverse)
library(patchwork)
myColours <- c("#A71C49","#11897A","#DD4814", "#282A36")


DataSet <- structure(list(`Var1` = c(3, 2, 5, 3, 4, 1, 3, 1, 
                                     5, 4, 5, 3, 5, 5, 5, 4, 4, 5, 4, 5, 5, 5, 5, 1, 5, 5, 4, 4, 3, 
                                     5, 5, 4, 1, 3, 5, 2, 5, 5, 4, 4, 2, 5, 1, 5, 3, 5, 5, 5, 2, 5, 
                                     3, 1, 5, 5, 5, 5, 4), `Var2` = c(3, 1, 4, 1, 2, 2, 
                                                                      3, 1, 3, 3, 3, 3, 2, 5, 5, 1, 4, 4, 5, 5, 4, 5, 3, 2, 3, 5, 2, 
                                                                      3, 3, 5, 5, 2, 1, 3, 4, 2, 4, 5, 3, 3, 5, 3, 1, 4, 3, 5, 3, 4, 
                                                                      2, 4, 1, 4, 4, 5, 1, 3, 3), `Var3` = c(3, 2, 1, 
                                                                                                             3, 1, 4, 3, 2, 4, 3, 3, 3, 5, 3, 3, 3, 3, 5, 5, 5, 3, 3, 3, 4, 
                                                                                                             5, 2, 4, 4, 4, 5, 5, 1, 1, 3, 5, 2, 5, 5, 3, 4, 3, 1, 1, 4, 3, 
                                                                                                             2, 5, 4, 2, 4, 4, 1, 4, 5, 1, 5, 2), Cohort = structure(c(1L, 
                                                                                                                                                                       1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 
                                                                                                                                                                       3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
                                                                                                                                                                       3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 
                                                                                                                                                                       4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L), .Label = c("1", "2", "3", "4"
                                                                                                                                                                       ), class = "factor")), row.names = c(NA, -57L), class = c("tbl_df", 
                                                                                                                                                                                                                                 "tbl", "data.frame"))


c5 <- ggplot(DataSet, aes(`Var1`, fill=Cohort)) +
  geom_bar() +
  theme(legend.position = "none")  +
  ylim(0,25) +
  scale_fill_manual(values=myColours)

c6 <- ggplot(DataSet, aes(`Var2`, fill=Cohort)) +
  geom_bar() +
  theme(legend.position = "none")  +
  ylim(0,25) +
  scale_fill_manual(values=myColours)

c7 <- ggplot(DataSet, aes(`Var3`, fill=Cohort)) +
  geom_bar() +
  ylim(0,25) +
  scale_fill_manual(values=myColours)

(c5 | c6 ) /
(c7 | guide_area())

我有以下错误消息:

1: Removed 2 rows containing missing values (geom_bar). 
2: position_stack requires non-overlapping x intervals 

缺失值指的是 Var1 的图形,即第三个图形的非重叠 x 区间。 如果我只渲染两个队列,我也会得到这些奇怪的未对齐的条: 与以前相同的未对齐,但只有群组 2 可见

和 Cohort 3 Var 3 进行比较一个不错的条形图

我会怀疑这样一个事实,即队列 2 中只有两个不同的数字,但它适用于上面带有 Var1 的条形图。 它也不是拼凑起来的,因为当我只渲染 Var3 条形图时也是如此。 它也不是仅为 Var3 Graph 渲染的图例

有没有人知道问题是什么或者我如何强制 ggplot 正确对齐条形?

谢谢!

(R 版本 4.0.4 已修补(2021-02-17 r80030);tidyverse v.1.3.1;patchwork v.1.1.1)

第三张图未对齐,因为堆叠条形图将值解释为numerical ,使其不适合堆叠(您是否将x=1x= 1.00001堆叠在一起等?)。 将其转换为有序向量有助于 ggplot 理解。

仅使用 tidyverse 考虑此示例:

myColours <- c("#A71C49","#11897A","#DD4814", "#282A36")

# Lenthen the dataset
DataSet2 <- DataSet %>% pivot_longer(cols = -Cohort,names_to = "Variable")

# This helps against the non-overlapping x intervals issue
DataSet2$value <- as.ordered(DataSet2$value)

ggplot(DataSet2,aes(x=value,fill=Cohort)) +
  geom_bar(position= position_stack()) + ylim(0,25)+
  facet_wrap(vars(Variable)) +  # make multiple graphs split by the column "Variable"
  scale_fill_manual(values=myColours)

结果:

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM