R ggplot具有恒定x轴比例但不同轴限制的网格

R ggplot具有恒定x轴比例但不同轴限制的网格,r,ggplot2,gridextra,R,Ggplot2,Gridextra,请查看以下打印代码: library(ggplot2) library(cowplot) a <- data.frame(a1=1:10, a2=1:10) b <- data.frame(b1=1:5, b2=2*(1:5)) aplot <- ggplot(a, aes(x=a1, ymin=0, ymax=12)) + geom_line(aes(y=a2)) bplot <- ggplot(b, aes(x=b1, ymin=0, ymax=12)) +

请查看以下打印代码:

library(ggplot2)
library(cowplot)
a <- data.frame(a1=1:10, a2=1:10)
b <- data.frame(b1=1:5, b2=2*(1:5))
aplot <- ggplot(a, aes(x=a1, ymin=0, ymax=12)) + 
  geom_line(aes(y=a2))
bplot <- ggplot(b, aes(x=b1, ymin=0, ymax=12)) + 
  geom_line(aes(y=b2))
plot_grid(aplot,bplot, ncol=2)
库(ggplot2)
图书馆(cowplot)

a您可以使用plot_grid中的rel_widths选项来实现这一点。您需要使用每个面板的范围xmax xmin的比率来计算希望每个绘图的相对大小。但是,还有一个额外的陷阱。rel_widths设置整个面板的相对宽度,包括边距。因此,在计算相对大小时,我们还需要考虑利润。在下面的代码中,将偏移值2添加到relative.size的分子和分母可以实现此目的。但请注意,如果更改页边距的大小,此偏移值可能会更改

aplot <- ggplot(a, aes(x=a1, ymin=0, ymax=12, xmin=0, xmax=max(a$a1))) + 
  geom_line(aes(y=a2))

bplot <- ggplot(b, aes(x=b1, ymin=0, ymax=12, xmin=0, xmax=max(b$b1))) + 
  geom_line(aes(y=b2))

relative.size <- (2+max(b$b1)) / (2+max(a$a1)) # the addition of 2 here is to account for the plot margins
plot_grid(aplot,bplot, ncol=2, rel_widths=c(1,relative.size), align = "h")

aplot-Hm,如果我们将两个图的x轴最大点设置为相同,会怎么样?这与您的初衷不同,但我们仍然可以比较不同的坡度声音,如使用facetting和space=“free”会更好option@zyurnaidi在我正在处理的情况下(试图为一张纸绘制一个图形),在每个面板中使用最大x轴跨度将是不可接受的空间浪费,当几个面板的跨度仅为最大范围的四分之一时。@baptiste看起来像是刻面将导致我想要的;我将稍加修改,看看我能做些什么。谢谢。是的,您需要使用相关数据创建一个data.frame并将其传递到注释的geom_point图层。我可能在这里偏离基准,但我相信需要进行额外的计算。在x限制之外,这些绘图有边距(我们可以按照您的指示进行控制),但它们也有轴文本。“12.5”有多宽?答案取决于字体大小和字体,一般来说,我不认为确定“12.5”字体的宽度是很简单的(也有必要加回刻度线的长度,但这样更容易)。我错了吗?@JacobSocolar你是对的。我现在不确定如何自动进行计算——让我再考虑一下。如果只需要进行少量打印,则可以手动测量刻度加标签的宽度(以x轴为单位)。同时,我把这个答案留给你,因为它接近你想要的,并且可能作为一种方法对其他人有用。如果我找到了自动计算的方法,我会更新这个答案。