ggplot2, facet_grid, free scales?

88
在下面的示例中,我如何使y轴限制根据每个面板中的数据进行缩放?
mt <- ggplot(mtcars, aes(mpg, wt, colour = factor(cyl))) + geom_point() 

这两个都不行:

mt + facet_grid(. ~ cyl, scales="free")
mt + facet_grid(. ~ cyl, scales="free_y")

有人知道 facet_gridscales 参数的预期用途是什么吗? - geotheory
@geotheory,文档中有说明。scales参数用于为每个分面绘图释放x、y或两者的比例尺。您可以选择“fixed”(默认值)、“free_x”、“free_y”或“free”来使用它,当您的变量范围差异很大且需要释放时。 - kentkr
5个回答

94

也许是因为你只用了一条y轴,按照你的方式。你尝试过类似这样的方法吗?

mt + facet_grid(cyl ~ ., scales="free")

2
我明白了 - 所以它不会按行或列缩放每个面板...在facet_wrap()的情况下也可以工作,我想。 - hatmatrix
如何使用条形图绘制相同的数据?我在这里提出了这个问题:http://stackoverflow.com/questions/29262916/how-i-get-a-facet-grid-plot-with-free-scales-and-barplots-with-ggplot2 - Juan
12
我认为这并没有解决问题。我遇到了相同的问题,“cyl ~ .”只是翻转了轴。现在,我想让x轴自由一些,但实际上它并不自由。我正在使用R版本3.2.3和ggplot2版本2.1.0。 - landau

43

对于这个12年前的问题,我很抱歉跳出来提供新答案,但我认为它可能会有用。如果你想保留网格布局,但想要类似于wrap的自由比例尺,你可能会对ggh4x::facet_grid2()感兴趣,它具有一个independent参数,可以让轴在网格布局的行或列中变化。

library(ggplot2)

ggplot(mtcars, aes(mpg, wt, colour = factor(cyl))) + 
  geom_point() +
  ggh4x::facet_grid2(. ~ cyl, scales = "free_y", independent = "y")

该内容由 reprex package (v2.0.1) 于2022-06-09 创建

(免责声明:我是ggh4x的作者)


4
非常整洁的解决方案,包装得很好!谢谢!! - Dubukay
3
这应该是这个问题的被接受的答案。ggh4x很棒,谢谢! - Joe Wasserman
1
非常感谢您的帮助。如果我可以给您的答案(和您的软件包)点赞两次,我一定会这样做! - BestGirl
1
优秀的扩展,很喜欢 independent 这个参数! - Djork
1
我刚从这个答案中发现了 ggh4x,感觉自己就像到了糖果店的孩子一样... scale_colour_multi - Djork

39

无法这样做。请参见此处

您可以使用facet_wrap替代,这将“自由”两个轴。


22

希望这可以帮助到你。

mt + facet_wrap(. ~ cyl, scales="free_y")

1

1
最好展示实际应该使用的代码,而不仅仅提供一个链接。 - Roger-123

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接