【问题标题】:How to make y-axis scales same size for each facet in ggplot2?如何使 ggplot2 中每个方面的 y 轴比例相同?
【发布时间】:2014-01-02 07:38:21
【问题描述】:

这是一个场景示例:

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 与 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}。

也没有办法为每一行指定限制,就像我们可以在 lattice 中通过将一个包含范围的列表传递给每个面板到 ylim 参数来做的那样。

【问题讨论】:

    标签: r plot ggplot2 lattice


    【解决方案1】:

    您可以将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")
    

    【讨论】:

    • 感谢您的建议。它似乎适用于我提供的示例,因此这回答了原始问题。但我的真实图表比示例更复杂。我使用了一些额外的元素,例如从其他数据帧派生的色带、点和线。起初它不喜欢您建议的解决方案。我只是转置了刻面,并且(不知何故)y 尺度现在大小相同。图表更有意义!我想知道为什么它不会在不转置方面的情况下做同样的事情。我将尝试提出一个可重现的示例。
    猜你喜欢
    • 2017-10-30
    • 1970-01-01
    • 1970-01-01
    • 2018-11-20
    • 2015-11-26
    • 2015-09-11
    • 1970-01-01
    • 2011-03-07
    相关资源
    最近更新 更多