【问题标题】:ggarrange align y-axes for graphs with same y-axis but annotations of different heightsggarrange 为具有相同 y 轴但注释不同高度的图形对齐 y 轴
【发布时间】:2021-11-25 12:34:44
【问题描述】:

我使用 ggarrange 排列了一系列 9 个图表。尽管所有图表都具有相同的 y 轴刻度,但我已分别为每个图表添加了显着性值。因为图表有不同的比较次数,所以注释的高度也不同。如何缩放 ggarrange 图形以使 y 轴对齐?

以下是其中一个图形和 ggarrange 函数的语法示例:

pwc_example <- example_melt %>%
  wilcox_test(value ~ variable, paired = TRUE, p.adjust.method = "holm", detailed = TRUE)

gg_example <- ggplot(example_melt, aes(x = reorder(variable, value), y = value)) +
  stat_summary(fun = mean, geom = "bar", width = 0.75, aes(fill = variable)) +
  stat_summary(fun.data = mean_cl_boot, geom = "errorbar",
               colour="black", position=position_dodge(1), width=.2) + 
  stat_pvalue_manual(pwc_example, label = "p.adj.signif", tip.length = 0.02, step.increase = 0.05, hide.ns = TRUE, y.position = c(6.3, 6.4, 6.5), label.size = 3) +
  scale_x_discrete(labels = c(init_com_rank = "Initial Communication", intervention_rank = "Intervention Needed", no_prob_rank = "No Problem", fin_com_rank = "Close communication", com_interrupted_rank = "Broken Communication", battery_rank = "Low Battery")) +
  ggtitle("Sequence 9") +
  theme(plot.title = element_text(size=10, hjust = 0.5, face = "bold")) +
  scale_y_continuous(breaks = seq(1,6,by = 1)) +
  theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust = 0.25))

gg_1 + scale_fill_manual(values = c("#9E0142", "#FDAE61","#FDAE61", "#FDAE61", "#FDAE61", "#FDAE61")) + theme(legend.position = "none")

figure <- ggarrange(gg_1, gg_2, gg_3, gg_4, gg_5, gg_6, gg_7, gg_8, gg_9, ncol = 3, nrow = 3, align = "hv")

pdf("figure.pdf", height=14)
ggdraw(figure)
dev.off()

这导致下图(底行被截断,但您仍然可以看到 y 轴高度的不同范围)

我尝试使用 stat_pvalue_manual(pwc, label = "p.adj.signif", tip.length = 0.02, step.increase = 0.05, hide.ns = TRUE, y.position = c(6.3, 6.4, 6.5) 中的 y.position 手动更改注释的位置,以便每个图形具有相同的最大 y 坐标 (6.5),但这不起作用。我无法将scale_y_continuous(breaks = seq(1,6,by = 1)) 中的 y 轴比例更改为更高的值,因为这超出了实际比例(注释是“额外的”),所以 6 需要是最大数字(我不知道是否可能添加额外的并以某种方式“隐藏”6以上的数字?)。我也玩过 ggarrange 中图形的纵横比和宽度和高度,但还没有找到解决方案。


编辑 我将每个图的语法更新为```scale_y_continuous(breaks = seq(1,10,by = 1), labels = c("1", "2", "3", "4", "5", "6", "", "", "", "")) 根据@danloo 的建议,但高度仍然不同,有没有办法强制上限?

【问题讨论】:

  • scale_y_continuous 有选项 labels 可以隐藏由于符号栏而需要添加的一些 y 刻度
  • 太棒了!我设法使用scale_y_continuous(breaks = seq(1,10,by = 1), labels = c("1", "2", "3", "4", "5", "6", "", "", "", "")) 做到了这一点,但它仍然显示刻度 (-),是否也可以隐藏这些?
  • 我觉得你只能把所有的勾去掉...
  • 我为所有图表编辑了 scale_y_continuous 的语法,但高度仍然略有不同(我用图片更新了我的问题)

标签: r ggplot2


【解决方案1】:
  • scale_y_continuous 有选项标签来隐藏由于重要性条而需要添加的一些 y 刻度
  • 函数patchwork::wrap_plots 强制轴的物理高度在每个子图中都相同。

【讨论】:

    猜你喜欢
    • 2013-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    • 2012-04-24
    • 1970-01-01
    • 2015-11-26
    • 1970-01-01
    相关资源
    最近更新 更多