调整ggplot2中堆叠条的顺序

Posted

技术标签:

【中文标题】调整ggplot2中堆叠条的顺序【英文标题】:Adjusting order of stacked bars in ggplot2 【发布时间】:2021-10-10 19:31:05 【问题描述】:

我无法弄清楚这一点,也没有找到类似的问题。我想显示一个条形图,其中 Y 轴是“受试者”,然后对于每个受试者,都有一个堆叠的条形图显示给药顺序。

[Subject, Mednum, Medname]
Subj A  Med0    MednameX
Subj B  Med0    MednameY
Subj B  Med1    MednameX
Subj B  Med2    MednameZ
Subj C  Med0    MednameP
Subj C  Med1    MednameX 

如果我使用这个:

ggplot(data, aes(x=Subject, y=Mednum,fill=Medname)) + geom_col() + coord_flip()

我明白了:

我不仅希望每个堆叠条具有相同的高度(我可以将另一列添加到值为 1 的数据集,以便所有内容的大小为 1),而且排序不正确 - 正如您在主题 B 中看到的那样,堆叠条(按 Mednum 排序)应为 MednameY --> MednameX --> MednameZ。

有人有解决办法吗?本质上,我想不是通过填充标签,而是通过附加(第四个)变量来排序堆叠条。

【问题讨论】:

【参考方案1】:

也许这就是您正在寻找的。如果我说对了,您可以通过切换到 geom_tile 来达到您想要的结果:

library(ggplot2)

ggplot(data, aes(y = Subject, x = Mednum, fill = Medname)) +
  geom_tile()

数据

data <- structure(list(Subject = c(
  "Subj A", "Subj B", "Subj B", "Subj B",
  "Subj C", "Subj C"
), Mednum = c(
  "Med0", "Med0", "Med1", "Med2",
  "Med0", "Med1"
), Medname = c(
  "MednameX", "MednameY", "MednameX",
  "MednameZ", "MednameP", "MednameX"
)), row.names = c(NA, -6L), class = "data.frame")

【讨论】:

以上是关于调整ggplot2中堆叠条的顺序的主要内容,如果未能解决你的问题,请参考以下文章

在ggplot2中手动更改复杂堆叠条形图上y轴项目的顺序

堆叠条形图 ggplot2 - 重新排序填充

ggplot2 堆叠直方图 - 转换为密度图

R语言ggplot2可视化:ggplot2可视化水平堆叠条形图并且在每个堆叠条形图的内部居中添加百分比文本标签信息

R可视化ggplot2绘制堆叠的条形图(Stacked Barplot)

R语言画图-条形图,堆叠条形图(ggplot2)