2013-11-26 65 views
31

當我在ggplot2中繪製條形圖時,我想將條形底部和x軸之間的空間縮小到0,但保持酒吧上方的空間和情節盒。我有一個黑客做下面。它很髒,我想再次清潔。有沒有辦法實現這種行爲沒有骯髒的小黑客?ggplot2條形圖,geom底部和x軸之間沒有空間,保持上面的空間

默認(以上所需的空間,但不希望下面的酒吧空間):

ggplot(mtcars, aes(x=as.factor(carb))) + 
    geom_bar() 

enter image description here

使用擴展(上述不必要0的空間,但得到下面條的0空間):

ggplot(mtcars, aes(x=as.factor(carb))) + 
    geom_bar() + 
    scale_y_continuous(expand = c(0,0)) 

骯髒的黑客(我喜歡它,但它..好,髒):

ggplot(mtcars, aes(x=as.factor(carb))) + 
    geom_bar() + 
    scale_y_continuous(expand = c(0,0)) + 
    geom_text(aes(x=1, y=10.3, label="Stretch it"), vjust=-1) 

enter image description here

+0

我想你考慮使用'coord_cartesian'得多硬編碼呢? – Henrik

+0

@baptise您可以添加爲未來的搜索者的解決方案。這也適用。 –

+0

好問題,這也讓我在ggplot2圖中感到困惑,y軸不是從圖片框的底部開始的。 – jrara

回答

27

我可能會丟失你真正想要的,但不使用geom_text砍你仍然可以設置限制

ggplot(mtcars, aes(x = as.factor(carb))) + 
    geom_bar() + 
    scale_y_continuous(expand = c(0, 0), limits = c(0, 10.3)) 

# marginally cleaner 
+1

正是我想要的。我嘗試在'scale_y_continuous'之後使用:'ylim(c(0,10.3))',這是不行的。我現在明白了。很簡單。謝謝。 –

7

因爲你看起來很舒服一些硬編碼...

ggplot(mtcars, aes(x = as.factor(carb))) + 
    geom_bar() + 
    coord_cartesian(ylim = c(0, 10.3)) 
+0

我之前並沒有意識到這個答案有多強大,並且可以推廣到分類尺度。 –

15

您可以手動擴展限制,例如,與expand_limits(y=10.1),或用這一招與擴大數據添加一個不可見的層,

ggplot(mtcars, aes(x=as.factor(carb))) + 
    geom_bar() + 
    scale_y_continuous(expand = c(0,0)) + 
    geom_blank(aes(y=1.1*..count..), stat="bin") 
+1

阿哈,那些'''變量... + 1! – Henrik

+0

有沒有辦法做到這一點沒有硬編碼(1.1)? – jrara

+0

你是什麼意思? – baptiste

相關問題