【发布时间】:2021-09-19 19:47:33
【问题描述】:
我经常看到具有相同共享 x 轴但不同 y 轴的图形。它们不能刻面,因为某些 y 轴需要复杂的名称和/或出于历史/解释原因而翻转坐标。
下面我绘制了一个这样的假记录示例,并展示了在 Inkscape 中对其进行调整后我希望该图的外观。有没有办法在 R/patchwork 中实现这个结果?
library(tidyverse)
library(patchwork)
set.seed(123)
dat <- tibble::tibble(a = 1:10,
b = c(0, 2, 5, 8, 5, 4, 6, 4, 3, 2),
c = -stats::rnorm(10, b, 3),
d = sample(letters[1:3], 10, TRUE))
shared_x <- c(0, 11)
pl1 <- dat %>%
ggplot(aes(x = a, y = b)) +
geom_point(colour = "indianred") +
coord_cartesian(xlim = shared_x) +
scale_y_continuous("B is awesome", position = "right")
pl2 <- dat %>%
ggplot(aes(x = a, y = c)) +
geom_point(colour = "steelblue") +
scale_y_reverse("C is inversely related to B") +
coord_cartesian(xlim = shared_x, ylim = c(3, -13))
theme_set(theme_classic())
(pl1 & theme(axis.title.x = element_blank(), axis.text.x = element_blank(), axis.ticks.x = element_blank(), axis.line.x = element_blank())) / pl2
ggsave("overlapping_axes.pdf", width = 10, height = 8, units = "cm")
由reprex package (v2.0.0) 于 2021-07-09 创建
【问题讨论】:
-
请注意,我必须在此处使用
theme_classic(),否则网格会重叠,从而很难很好地做到这一点。 -
花了几年时间说服
ggplot2作者将sec_axis添加到它的情节中,主要是因为拥有两个不同单位的轴很容易混淆。您的“手动调整版本”(在我看来)正是他们所谈论的混乱:红点和蓝点之间的垂直位置存在暗示相关性。这可以做到吗?也许,尽管可能需要手动绘制轴线,并且坐标都需要使用手动覆盖的轴标签进行归一化。 -
话虽如此,我建议 facets 和
patchwork对我来说更清楚。您已经在做patchwork部分,我建议添加包含刻面的框会清楚地将两者分开。如果那是您不想要的,并且您希望蓝/红点混合,那么(再次,imo)将需要大量解释来证明这样做是合理的。 (主观的,我承认。) -
感谢您的回复!在我的领域(古海洋学)中,我们有许多不同类型的数据是针对相同的深度/年龄间隔(通常在 x 轴上)生成的。我们经常想研究重建的温度是否显示出与不同代理中相同的模式,例如二氧化碳。所以它们是完全不同的 y 轴,具有不同的含义,但我们希望将它们放在一起,以便更好地在视觉上比较模式。见for example。
-
或者another example image。但他们周围都有盒子……嗯