我有一個對象ggplot2
,比如myPlot
,我如何確定x軸和y軸的範圍?如何提取ggplot2對象的繪圖軸範圍?
它似乎不是數據值範圍的簡單倍數,因爲可以重新繪製圖,修改座標軸的範圍等等。 findFn
(來自sos
)和谷歌似乎沒有提出相關結果,除了如何設置軸的範圍。
我有一個對象ggplot2
,比如myPlot
,我如何確定x軸和y軸的範圍?如何提取ggplot2對象的繪圖軸範圍?
它似乎不是數據值範圍的簡單倍數,因爲可以重新繪製圖,修改座標軸的範圍等等。 findFn
(來自sos
)和谷歌似乎沒有提出相關結果,除了如何設置軸的範圍。
在較新版本的ggplot2中,您可以在ggplot_build(p)
的輸出中找到此信息,其中p
是您的ggplot對象。
對於舊版本的ggplot的(< 0.8.9),下面的解決方案工作:
而直到哈德利發佈新版本,這可能會有幫助。如果您未在圖中設置限制,則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
與
ggplot_build(myPlot)$panel$ranges[[1]]$x.range
這些解決方案適用於連續的數字軸,但是如何處理具有日期(連續比例)或分類值的軸?當我使用這種方法時,我會得到大數字值,需要一些轉換爲日期格式才能使用geom_text添加文本。 –
我的x範圍我正在使用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
OLDER ANSWER
我目前使用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
我相當肯定,不能直接從劇情對象本身提取,但你可以推斷它(在簡單的情況下)從你的數據和'expand'的默認值。見[這裏](http://stackoverflow.com/questions/7611691/relative-positioning-of-geom-text-in-ggplot2/7617377#7617377)。 – joran
@joran謝謝 - 看起來很有趣。你的意思是'expand_range'?我無法按照鏈接中的建議「擴展」。 – Iterator
我指的是'ggplot'中'scale_ *'函數的'expand'參數。例如,請參閱[此處](http://had.co.nz/ggplot2/scale_continuous.html)中列出的默認值。 – joran