如何在ggplot2中为每个面创建相同大小的y轴?

时间:2013-12-14 15:34:49

标签: r plot ggplot2 lattice

以下是该方案的示例:

df<-data.frame(t=1:8, V=c(1:4,seq(40,46, 2)), C1=rep(c('A','B'), 4), C2=rep(c('C','D'), c(4,4)))

这会产生以下数据框:

  t  V C1 C2
1 1  1  A  C
2 2  2  B  C
3 3  3  A  C
4 4  4  B  C
5 5 40  A  D
6 6 42  B  D
7 7 44  A  D
8 8 46  B  D

我想绘制V vs t并用C1和C2分割刻面。我希望每个方面的max(V)-min(V)相同,但max(V)和min(V)会有所不同,具体取决于每行图的数据范围。这是我到目前为止的地方:

ggplot(data=df) + geom_point(aes(x=t, y=V)) + facet_grid(C2~C1)

default version

max(V)-min(V)具有相同的尺寸,浪费了大量的y轴,并且每个面板中的额外范围使趋势变得模糊。另一种选择是:

ggplot(data=df) + geom_point(aes(x=t, y=V)) + facet_grid(C2~C1, scales='free_y')

free_y version

在这种情况下,max(V)-min(V)=第1行图表为{6,第2行图表为3}。

也没有办法为每一行指定限制,就像我们能够通过将带有范围的列表传递给ylim参数一样在格子中进行。

1 个答案:

答案 0 :(得分:2)

您可以将space="free_y"添加到facet_grid(),以确保每行的值之间的空格相同。

ggplot(data=df) + geom_point(aes(x=t, y=V)) + 
        facet_grid(C2~C1, scales='free_y',space="free_y")