2017-10-20 93 views
0

說我有一個數據幀,並希望做圖如何指定GGPLOT2獨立軸的曲線圖的尺寸標註

df <- melt(iris) 

p <- ggplot(data = df, aes(x = Species, y = value)) + 
     geom_boxplot() + theme(aspect.ratio = 1) 

我則想用ggsave()保存的這一個pdf情節

ggsave(plot = p, width = 3, height = 3, dpi = 300, filename = "not squished axis.pdf") 

enter image description here

的問題是,我想指定的情節本身的尺寸,但獨立的,這樣的情節W的下方指定軸標籤根據軸的絕對長度而不同的尺寸和尺寸。

q <- ggplot(data = df, aes(x = Species, y = (value)*10000000)) + 
     geom_boxplot() + theme(aspect.ratio = 1) 

ggsave(plot = q, width = 3, height = 3, dpi = 300, filename = "squished axis.pdf") 

enter image description here

有沒有一種方法可以輕鬆地做到這一點?

這裏是一個曲線圖的一個例子接近我想在軸長度的術語:

enter image description here

唯一的問題是,通過改變高寬比,我最終壓扁在y使x軸更接近於均勻長度...

+0

我不明白的問題。 「獨立於軸標籤」的含義是什麼?如果在'ggsave'中指定'height'和'width',繪圖將*具有相同的尺寸(以像素/英寸爲單位)和(取決於數據)不同的軸範圍。你可以包含你想要實現的模型/樣本圖嗎? –

+0

上述兩個圖中軸的絕對長度不同,因爲第二個圖中的y軸中斷標籤比第一個圖中的要長。我希望能夠具有不同的長度軸標籤,但保持相同的x軸和y軸長度。我已經更新了第三個情節的問題,看起來更接近我想實現的目標 –

+0

@MauritsEvers我無法制作我想要的代表情節,但本質上我想要繪製區域的大小(即,,以x和y軸爲單位的長度(以英寸爲單位))在由於編號格式較長而導致y軸標籤較長的圖之間保持一致 –

回答

0

我不明白你在做什麼,所以這在黑暗中有點刺傷。

可以使用使用facet_wrap相同的比例顯示兩個地塊:

# Your sample data 
df <- list(
    one = melt(iris), 
    two = with(melt(iris), cbind.data.frame(Species, variable, value * 1000))); 
df <- melt(df); 

ggplot(df, aes(x = Species, y = value)) + 
    geom_boxplot() + theme(aspect.ratio = 1) + 
    facet_wrap(~ L1); 

enter image description here

或允許y標尺,爲各個方面自由變化。

ggplot(df, aes(x = Species, y = value)) + 
    geom_boxplot() + theme(aspect.ratio = 1) + 
    facet_wrap(~ L1, scales = "free_y"); 

enter image description here

您可以調整小面的網格佈局,通過指定用nrowncol列或行的數。

因此,例如,兩個地塊的垂直放置,你可以做

ggplot(df, aes(x = Species, y = value)) + 
    geom_boxplot() + theme(aspect.ratio = 1) + 
    facet_wrap(~ L1, ncol = 1, scales = "free_y"); 

enter image description here

+0

謝謝,是的,小平面包裝確實導致了繪圖空間的均勻性,但我真的很想分開繪製這些圖。以最後一個例子作爲參考,注意兩個圖的灰色繪圖區域的長度是相同的,即使值8000,6000,4000等比8,6,4等值更遠。但是,您可以當我看到這些pdf時,在我的例子中看到,x軸的長度被擠壓以適應y軸值的長度。 –

+0

沒有指定要用ggsave()保存的圖的「高度」和「寬度」尺寸,我想要防止軸標籤擠壓繪圖區域,但是,我希望所有的圖都能保存與繪圖區域(x軸的長度和y軸的長度)是一定的長度 –

+0

恐怕在這種情況下,您最好的選擇是'facet_wrap'。說實話,你的繪圖要求對我來說似乎很奇怪;這似乎是一個純粹的美學問題。一個可以通過'facet_wrap'輕鬆解決的問題。出於某種原因你不想使用它。無論如何。祝你好運,我沒有進一步的幫助,我可以提供。 –