ggplot网格具有恒定的x轴刻度但不同的轴限制

时间:2016-05-16 01:19:11

标签: 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)) + 
  geom_line(aes(y=b2))
plot_grid(aplot,bplot, ncol=2)

它产生两个相同尺寸的并排图,显示相似的线条。但是x轴刻度是相当不同的。实际上,第二条线的斜率是第一条线的两倍。

我正在寻找一种绘制此图的方法,以便绘图的宽度按其x轴的极限进行缩放,以便可以在视觉上比较斜率。我对可视化感兴趣的真实情节是五个,除最左边外,缺少y轴标签。我可以使用grid.arrange()将它们连续绘制成我想要的任何宽度,但问题是我不知道要为每个面板分配什么宽度以确保它们正确出现(面板)宽度必须足够大以容纳绘图边距,y轴刻度线和y轴文本)。我可以自己设置边距并在面板宽度中考虑它们,但我找不到一个很好的方法来确定y轴文本的宽度(例如以cm为单位)。

1 个答案:

答案 0 :(得分:0)

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

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")

给出

enter image description here

相关问题