我怎样才能提取一个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