2016-09-17 90 views
1

我想用R繪製密度函數並填充以下的區域它。我的例子是:未正確使用geom_area繪製的區域(某些區域有偏移)

library(ggplot2) 
x = seq(-4, 4, 0.1) 
y = dnorm(x, mean=0, sd=1) 
myDF = data.frame(x,y,xfill=ifelse(x>-1,x,0)) 
p <- ggplot(myDF, aes(x,y)) 
p + geom_line(size=1) + geom_area(aes(x=xfill),fill="red") 

它看起來像在RStudio中的以下圖像。

enter image description here

我使用RStudio版本0.99.902與平臺ř版本3.3.1(2016年6月21日):x86_64的-W64-的mingw32/64(64位)下運行:視窗> = 8 x64(內部版本9200)與包ggplot2_2.1.0

雖然創建這個問題我被鏈接到另一個問題here。現在改變根據的答案有一個的geom_area調用

geom_area(aes(x=xfill),fill="red", pos="identity") 

那麼我的情節看起來像 enter image description here

最後減少與

x = seq(-4, 4, 0.01) 

的X步長給我不知何故,我想要什麼。

enter image description here

我的問題:

  1. 任何想法,爲什麼會存在這種問題在0附近的區域?
  2. 爲什麼'pos =「identity」'在這裏幫助 - 仍然缺少一些區域?
  3. 我真的在這裏解決了這個問題嗎?
+0

我在這裏發現了另一個問題(或者可能是相同的),我將xfill設置爲0,因爲我不想繪製x值。通過設置它們不與最小值匹配來解決這個問題,在這種情況下:'myDF = data。frame(x,y,xfill = ifelse(x> -1,x,-1))' – Martin

回答

3

你可以使用NA而不是0爲彈力緊值你不想陰影

myDF = data.frame(x,y,xfill = ifelse(x > -1, x, NA)) 

p <- ggplot(myDF, aes(x,y)) 
p + geom_line(size=1) + geom_area(aes(x=xfill),fill="red") 

enter image description here

而且,一個小技巧:如果你繪製區域1,接着由線可能看起來更好,因爲該行不部分模糊

ggplot(myDF, aes(x,y)) + 
    geom_area(aes(x=xfill),fill="red") + 
    geom_line(size=1) 

enter image description here

+0

不需要減少步長或使用'pos ='identity''。似乎0作爲x座標誤導。非常感謝。 – Martin

0

我認爲ggplot製作多個區域並堆疊它們,這就是爲什麼position = identity有助於它使區域重疊。

我會改變代碼,使xfill一個二進制變量,指定哪些填充是需要的。減小步長以消除間隙。

x <- seq(-4, 4, 0.01) 
y <- dnorm(x, mean=0, sd=1) 
myDF <- data.frame(x,y,xfill=ifelse(x>-1,TRUE,FALSE)) 
ggplot(myDF, aes(x,y, fill = xfill)) + 
     geom_line(size=1) + 
     geom_area() 
+0

這會產生兩個分開的彩色區域,但不完全是我想要的。我希望右側是紅色的,左側是完全不着色的。 – Martin

+0

\你可以設置'alpha'爲零以不顯示不需要的顏色。 –