2014-01-07 46 views
3

我想更改圖的一部分背景色。那可能嗎?僅在圖的一個區域上更改背景色

例如,使用下面的圖表,我可能想指出我對2到4噸重量的汽車特別感興趣,因此希望使用粉紅色背景突出顯示此區域。

更具體地說,我想覆蓋一個透明的粉紅色矩形,該矩形在x軸上從2延伸到4並覆蓋整個y軸區域。

我該如何編碼?

p <- ggplot(mtcars, aes(wt, mpg)) 
p + geom_point() 

回答

11

矩形很容易使用geom_rect (documentation)。你只需要在調用geom_rect的aes中指定它的尺寸。在下面的代碼中更改alpha的透明度。

require(ggplot2) 
p <- ggplot(mtcars, aes(wt, mpg)) 
p + geom_point() + 
    geom_rect(aes(xmin = 2, xmax = 4, ymin = -Inf, ymax = Inf), 
        fill = "pink", alpha = 0.03)) 

這是否會產生類似於你之後的東西?

Figure attempt

+1

PS是有辦法來告訴它簡單地覆蓋整個Y軸,而不是指定在y限制? – Megan

+0

顯然是的,使用Inf來計算ymin/ymax。看我的編輯應該幫助。 –

3

雖然這工作,我注意到它繪製許多矩形作爲數據點,這可能是一個問題,尤其是與磨製其中面之間點的數量變化。這通過非常低的α來反映,以獲得僅約50%的透明度。我認爲這是因爲它使用了從ggplot()調用的data.frame和美學。

避免這種情況的一種方法是在geom_point()內調用aes()並專門爲矩形創建一個data.frame。注意alpha如何大得多,但效果是相似的。

require(ggplot2) 
ggplot(mtcars) + geom_point(aes(wt, mpg)) + 
geom_rect(data=data.frame(xmin = 2, xmax = 4, ymin = -Inf, ymax = Inf), 
    aes(xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax), fill="pink", alpha=0.5) 

Result enter image description here