当面板中的绘图具有不同的轴尺寸时,如何确保一致的轴缩放?

问题描述 投票:0回答:1

以下代码创建一个具有特定布局的八个图的面板。它做了我想要的一切,除了轴刻度在所有绘图上不一致之外。我需要 X 轴上零和一之间的距离在所有图中都相同。我未能找到解决方案。欢迎任何建议(不一定只使用我下面使用的软件包)。

如有必要,您可以增加某些绘图的大小以实现此目的。例如,如果需要将

p3
的 X 轴限制从 0-6 增加到 0-7,以便以轴匹配的方式排列较小的图,这是可以的。但你不能减少限制,也不能让所有图都具有相同的限制。

# Load packages
library(ggplot2)
library(patchwork)

# Define plots
p1 <- ggplot() +
  scale_y_continuous(limits = c(0, 6)) +
  scale_x_continuous(limits = c(0, 3)) +
  ggtitle("p1")

p2 <- ggplot() +
  scale_y_continuous(limits = c(0, 6)) +
  scale_x_continuous(limits = c(0, 3)) +
  ggtitle("p2")

p3 <- ggplot() +
  scale_y_continuous(limits = c(0, 6)) +
  scale_x_continuous(limits = c(0, 6)) +
  ggtitle("p3")

p4 <- ggplot() +
  scale_y_continuous(limits = c(0, 6)) +
  scale_x_continuous(limits = c(0, 3)) +
  ggtitle("p4")

p5 <- ggplot() +
  scale_y_continuous(limits = c(0, 6)) +
  scale_x_continuous(limits = c(0, 3)) +
  ggtitle("p5")

p6 <- ggplot() +
  scale_y_continuous(limits = c(0, 6)) +
  scale_x_continuous(limits = c(0, 1.5)) +
  ggtitle("p6")

p7 <- ggplot() +
  scale_y_continuous(limits = c(0, 6)) +
  scale_x_continuous(limits = c(0, 1.5)) +
  ggtitle("p7")

p8 <- ggplot() +
  scale_y_continuous(limits = c(0, 6)) +
  scale_x_continuous(limits = c(0, 1.5)) +
  ggtitle("p8")

# Set desired design
design <- "AAABBB
           CCCCCC
           DDDEEE
           FFGGHH"

# Plot panel with specific design
p1 + p2 + p3 + p4 + p5 + p6 + p7 + p8 +
  plot_layout(design = design)
r ggplot2 axis
1个回答
0
投票

我确信可能有很多不同的方法来解决这个问题,但我想到的一个想法是使用

coord_fixed
固定坐标比并固定绘图的高度。

文档说明

固定比例坐标系强制轴上数据单元的物理表示之间存在指定的比率。该比率表示 y 轴上的单位数相当于 x 轴上的 1 个单位。

由于每个图表都具有相同的 y 限制 (6),并且我们会将每个图表的高度设置为相同,因此无论施加何种限制,x 轴上的一个单位的物理表示都将保持不变。

请参阅以下示例:

# Load packages
library(ggplot2)
library(patchwork)

# Define plots
p1 <- ggplot() +
  scale_y_continuous(limits = c(0, 6)) +
  scale_x_continuous(limits = c(0, 3)) +
  coord_fixed(ratio = 0.125) +
  ggtitle("p1")

p2 <- ggplot() +
  scale_y_continuous(limits = c(0, 6)) +
  scale_x_continuous(limits = c(0, 3)) +
  coord_fixed(ratio = 0.125) +
  ggtitle("p2")

p3 <- ggplot() +
  scale_y_continuous(limits = c(0, 6)) +
  scale_x_continuous(limits = c(0, 6)) +
  coord_fixed(ratio = 0.125) +
  ggtitle("p3")

p4 <- ggplot() +
  scale_y_continuous(limits = c(0, 6)) +
  scale_x_continuous(limits = c(0, 3)) +
  coord_fixed(ratio = 0.125) +
  ggtitle("p4")

p5 <- ggplot() +
  scale_y_continuous(limits = c(0, 6)) +
  scale_x_continuous(limits = c(0, 3)) +
  coord_fixed(ratio = 0.125) +
  ggtitle("p5")

p6 <- ggplot() +
  scale_y_continuous(limits = c(0, 6)) +
  scale_x_continuous(limits = c(0, 1.5)) +
  coord_fixed(ratio = 0.125) +
  ggtitle("p6")

p7 <- ggplot() +
  scale_y_continuous(limits = c(0, 6)) +
  scale_x_continuous(limits = c(0, 1.5)) +
  coord_fixed(ratio = 0.125) +
  ggtitle("p7")

p8 <- ggplot() +
  scale_y_continuous(limits = c(0, 6)) +
  scale_x_continuous(limits = c(0, 1.5)) +
  coord_fixed(ratio = 0.125) +
  ggtitle("p8")

# Set desired design
design <- "AAABBB
           CCCCCC
           DDDEEE
           FFGGHH"

# Plot panel with specific design
p1 + p2 + p3 + p4 + p5 + p6 + p7 + p8 +
  plot_layout(design = design, heights = 100)

输出:https://i.imgur.com/4cdD1qp.png

创建于 2024-06-23,使用 reprex v2.1.0

虽然不是很漂亮,但希望对你有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.