2016-09-14 72 views
0

我正在設計一個帶有ggplot2包的條形圖。 唯一的問題是,我無法擺脫酒吧和X軸之間的空間。 我知道這個公式應該解決這個問題:連續位置比例尺對ggplot2中條和x軸之間的間距沒有影響R

scale_y_continuous(expand = c(0, 0)) function 

但似乎對錯誤欄中的元素被覆蓋,並總是給這個空間。

這裏我的代碼:

p<-ggplot(data=tableaumergectrlmut, aes(x=ID, y=meanNSAFbait, fill=Condition)) + 
geom_bar(stat="identity", position=position_dodge())+ 
scale_y_continuous(expand = c(0,0))+ 
geom_errorbar(aes(ymin=meanNSAFbait-SDNSAFbait, 
    ymax=meanNSAFbait+SDNSAFbait, width=0.25), position=position_dodge(.9)) 
+0

你能不能做一個重複的例子?可能你可以在內置的數據集上演示這個,但是如果不是,你應該用'dput()'或者通過模擬來分享你的數據。 [請參閱這裏瞭解製作可重複示例的技巧](http://stackoverflow.com/q/5963269/903061)。 – Gregor

+0

此外,它很好,如果例子*最小* - 有助於消除分心的東西,從實際問題。如果自定義顏色,標籤,角度文本,主題自定義等不屬於問題的一部分,請將其從您的問題中刪除。 – Gregor

+0

通過使用expand = c(0,0),可以將y軸的極限值設置爲數據集中最大和最小y值。如果你的錯誤條可能非常大以至於它們低於零(奇怪但可能),那麼最小值就是這個值(例如-1),而不是零。也許嘗試並添加,限制= c(0,0)scale_y_continuous – Wave

回答

0

使用一些示例數據生成一個情節是(我認爲)顯示您所遇到的問題。

library(ggplot2) 

df <- data.frame(val = c(10, 20, 100, 5), name = LETTERS[1:4]) 

ggplot(df, aes(x = name, y = val, fill = name)) + 
    geom_bar(stat = "identity") 

enter image description here

有從零點在y軸(杆的底部),並且其中x軸標籤是一間隙。

ggplot(df, aes(x = name, y = val, fill = name)) + 
    geom_bar(stat = "identity") + 
    scale_y_discrete(expand = c(0,0)) + 
    scale_x_discrete(expand = c(0,0)) 

這讓劇情:

enter image description here

注意我

爲此,可以使用scale_y_discretescale_y_continuous,取決於您的數據的性質,並設置expandc(0,0)刪除我們也沿y軸去除了缺口,只需刪除scale_x_discrete一行即可重新添加此缺口。

由於誤差條帶是一個問題,這裏有幾個例子:

ggplot(df, aes(x = name, y = val, fill = name)) + 
    geom_bar(stat = "identity") + 
    geom_errorbar(aes(ymin = val - 10, 
        ymax = val + 10)) 

enter image description here

你可以用規模來降低去除填充到錯誤吧:

ggplot(df, aes(x = name, y = val, fill = name)) + 
    geom_bar(stat = "identity") + 
    geom_errorbar(aes(ymin = val - 10, 
        ymax = val + 10)) + 
    scale_y_continuous(expand = c(0,0)) 

enter image description here

或者您可以使用coord_cartesian給出一個硬切斷:

ggplot(df, aes(x = name, y = val, fill = name)) + 
    geom_bar(stat = "identity") + 
    geom_errorbar(aes(ymin = val - 10, 
        ymax = val + 10)) + 
    scale_y_continuous(expand = c(0,0)) + 
    coord_cartesian(ylim = c(0, max(df$val) + 10)) 

enter image description here

+0

是的,謝謝你作爲一個例子顯示的情節。我也可以獲得這個結果,但是一旦我添加了錯誤欄,間距就會再次出現。 –

+0

我已經添加了一些錯誤欄。這是否突出(並解決)你遇到的問題? –

+0

是的,這完全突出了我的問題。我試圖在最後添加scale_y_continuous(expand = c(0,0)),就像你做的那樣,它終於按預期工作了!非常感謝你。 –

相關問題