使用 facet_grid 和一个因子来确定列的填充颜色时保持列的顺序 (geom_col)

Posted

技术标签:

【中文标题】使用 facet_grid 和一个因子来确定列的填充颜色时保持列的顺序 (geom_col)【英文标题】:Maintain order of columns (geom_col) when using facet_grid and a factor to determine columns' fill colour 【发布时间】:2021-12-22 05:05:58 【问题描述】:

我对@9​​87654324@ 和facet_grid 有一个小问题。我想绘制在实验期间接受 x 次戳(范围从 1 到 4,参见 x 轴)的活跃和休息个体的百分比。我想在不同的窗格中保持列的相同位置,这意味着左侧的活动列(深灰色)和右侧的其余列(浅灰色)。这样一来,Round.no 的每个值都会为活跃个体列“保留”空间,即使在该轮中没有活跃个体收到该数量的戳。

从下图可以看出,ggplot 将列向左移动,那里有空闲空间(没有活跃的个人在该轮中收到这么多的戳)。这是在第一组中获得 3 次戳,在第三组中获得 4 次戳的个人的情况。

如何在不改变因子顺序的情况下保持顺序?我需要保持这个顺序(左活动,右休息)以与其他情节保持一致。

这是我一直在使用的代码:

plot <- ggplot(plot_summary.df, aes(x = as.factor(no.Pokes), y = perc, fill = Resting)) 
plot <- plot + geom_col(position = position_dodge(preserve = "single"))
plot <- plot + facet_grid(rows = plot_summary.df$Round.no)

谢谢

【问题讨论】:

这能回答你的问题吗? ggplot2 keep unused levels barplot 添加 drop = F 很好,我一定要试试! 【参考方案1】:

我在发布后几秒钟就回答了自己...

所需的只是用百分比 = 0“填充”空空间。我创建了 4 行,其中 perc 值等于 0。因此,ggplot 占这些列但不给他们看。

附上代码:

dumdum <- plot_summary.df[1:4,]

dumdum$Round.no <- c(1, 1, 1, 3)
dumdum$no.Pokes <- c(3, 4, 4, 4)
dumdum$Resting<- c("N", "N", "Y", "N")
dumdum$perc <- c(0, 0, 0, 0)

plot_summary.df <- bind_rows(plot_summary.df, dumdum)

结果:

【讨论】:

回答了他自己的问题

以上是关于使用 facet_grid 和一个因子来确定列的填充颜色时保持列的顺序 (geom_col)的主要内容,如果未能解决你的问题,请参考以下文章

从多个因素之一在 facet_grid 中包装文本

facet_grid层次分裂

我可以自由设置秤比x和y其它美学(例如尺寸)使用facet_grid时?

3集群因子

HashMap的初始容量和加载因子

如何获取目标基因的转录因子(上)