2014-01-22 32 views
3

我正在使用faceg_wrap和ggplot來創建一個方面圖。我的問題是,我的方面總是出現,看起來像非常短,非常寬的矩形,但我希望他們是方形的,所以他們更容易理解。理想情況下,我想指定我想要的列的數量,並讓ggplot弄清楚情節的高度應該是多少,以便所有方面都是正方形。這可能嗎?如何讓我的方面完美呈現方形?

+1

'library(fortunes);財富(「尤達」) - 「西蒙布隆伯格:這是R.沒有,如果只有如何。」您需要計算facet的總數(即faceting變量的級數),除以列數以獲得行數,然後使用'ggsave()'以正確的整體保存圖長寬比...考慮到裝飾(傳說,軸標等)可能會使它更難一點,但你可能會接近。 –

+0

你可能想把你的方面分成不同的情節,並用'grid.arrange(...)'來排列它們。閱讀'gridExtra'包中的文檔,特別是'grid.layout(...)'和'grid.arrange(...)'。否則,請提供具有代表性的數據樣本,並向我們展示您現在正在獲取的內容。 – jlhoward

回答

5

也許aspect.ratio幫助:

df <- data.frame(x = runif(100, 0,10), y = runif(100, 0, 50), z=gl(4,25)) 
ggplot(df, aes(x, y)) + 
    geom_point() + 
    facet_wrap(~ z, ncol = 4) + 
    theme(aspect.ratio = 1) # try with and without 
+0

這不適用於我,因爲我使用的是舊版本的ggplot。 coord_fixed(1)似乎完成了同樣的事情。 – andrew

+0

接受這一個,因爲它應該爲最新版本的ggplot的人工作,並使用主題()比我的解決方案更好。 – andrew

0

我明白這個問題稍有不同lukeA。我以爲你想讓這些地塊以n×m的方式排列,尺寸儘可能接近「正方形」。

ggplot(df, aes(x, y)) + 
    geom_point() + 
    facet_wrap(~ z, ncol = sqrt(length(levels(df$z)))) 

enter image description here

0
g = ggplotGrob(p) 
g$respect = TRUE 
require(grid) 
grid.draw(g) 
0

使用coord_fixed(1)的伎倆。似乎我使用的ggplot的舊版本,所以主題(aspect.ratio = 1)不適合我。

df <- data.frame(x = runif(100, 0,10), y = runif(100, 0, 50), z=gl(4,25)) 
ggplot(df, aes(x, y)) + 
    geom_point() + 
    facet_wrap(~ z, ncol = 4) + 
    coord_fixed(1) 
相關問題