我怎样才能提取一个ggplot2对象的绘图轴的范围?

我有一个来自ggplot2的对象,比如myPlot ,我怎样才能确定x轴和y轴的范围?

它似乎不是数据值范围的简单倍数,因为可以重新绘制图表,修改坐标轴的范围等等。 findFn (来自sos )和Google似乎没有find相关的结果,除了如何设置轴的范围。

在ggplot2的新版本中,你可以在ggplot_build(p)的输出中find这个信息,其中p是你的ggplot对象。

对于旧版本的ggplot(<0.8.9),以下解决scheme工作:

直到哈德利发布新版本,这可能会有所帮助。 如果不在图中设置限制,则ggplot对象中不会有任何信息。 但是,在这种情况下,您可以使用ggplot2的默认值,并从数据中获取xlim和ylim。

 > ggobj = ggplot(aes(x = speed, y = dist), data = cars) + geom_line() > ggobj$coordinates$limits $x NULL $y NULL 

一旦你设置了限制,它们就可以在对象中使用:

 > bla = ggobj + coord_cartesian(xlim = c(5,10)) > bla$coordinates$limits $x [1] 5 10 $y NULL 

与yrange一起

 ggplot_build(myPlot)$panel$ranges[[1]]$y.range 

和xrange一起

 ggplot_build(myPlot)$panel$ranges[[1]]$x.range 

我正在使用ggplot2版本2,我不知道这是否是以前的版本,假设你已经保存你的plt对象的情节。 提取范围很容易,

 # y-range layer_scales(plt)$y$range$range # x-range layer_scales(plt)$x$range$range 

版本2.2.0中,必须按如下方式完成:

 # y-range ggplot_build(plot.object)$layout$panel_ranges[[1]]$y.range # x-range ggplot_build(plot.object)$layout$panel_ranges[[1]]$x.range 

UPDATE

我目前正在使用ggplot2 版本2.2.1.9000 (开发版本),如何提取绘制的x轴和y轴值的范围已经改变了一次:

 obj <- qplot(mtcars$disp, bins = 5) # x range ggplot_build(obj)$layout$panel_params[[1]]$x.range # y range ggplot_build(obj)$layout$panel_params[[1]]$y.range 

更老的答案

我目前正在使用ggplot2版本2.1.0.9001 ,我注意到,可以使用稍微不同的R代码来提取范围:

 obj <- qplot(mtcars$disp, bins = 5) # x range ggplot_build(obj)$layout$panel_ranges[[1]]$x.range # y range ggplot_build(obj)$layout$panel_ranges[[1]]$y.range