[英]misaligned bars in geom_bar using fill
我对 ggplot 的 geom_bar 有问题。
我有几个从几个变量呈现的条形图,它们都使用相同的第四个变量作为填充:
出于某种原因,在第三张图表中,队列 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 中只有两个不同的数字,但它适用于上面带有 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=1
和x= 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.