以下是该方案的示例:
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)
max(V)-min(V)具有相同的尺寸,浪费了大量的y轴,并且每个面板中的额外范围使趋势变得模糊。另一种选择是:
ggplot(data=df) + geom_point(aes(x=t, y=V)) + facet_grid(C2~C1, scales='free_y')
在这种情况下,max(V)-min(V)=第1行图表为{6,第2行图表为3}。
也没有办法为每一行指定限制,就像我们能够通过将带有范围的列表传递给ylim参数一样在格子中进行。
答案 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")