2016-03-01 297 views
2

我想基於因子變量「狀態」來區分繪圖顏色的區域。我使用fill = Status,但是,我在劇情區域看到了一個突破。關於如何避免這種情況的任何想法/建議,爲什麼會發生這種情況?geom_area的繪圖區域中的空白

df1 <- data.frame(Date=seq(as.Date("2016/03/01"), as.Date("2016/03/10"), "day"), 
      Storypoints=c(8,14,16,23,28,35,40,44,46,55), 
      Status=c(rep("Completed",7), rep("Open",3))) 

ggplot(data=df1, mapping = aes(x = Date)) + 
geom_area(aes(y=Storypoints, fill=Status)) 

plot

+2

的原因是,有beween月07和08月沒有數據點,因爲在間隙兩側的點不屬於同一組,ggplot不將它們連接。 – Stibu

+0

那麼關於如何完成這個任何想法?我希望有一個連續的陰謀區分兩個類別 – Sumedh

+0

請參閱我的答案。如果你修改了你的數據,這個差距實際上就在你的數據中,只能填充。這可能不是你打算做的。 – Stibu

回答

2

您可以使用寬度= 1的geom_bar以精確表示您的數據的連續區域圖。

ggplot(data=df1, mapping = aes(x = Date)) + 
geom_bar(aes(y=Storypoints, fill=Status), stat="identity",width=1) 

enter image description here

+0

這是完美的,謝謝! – Sumedh

-2

我想這是因爲ggplot無法確定,給它其狀態該區域所屬的,所以它的顏色。

我介紹了另一個狀態,並給填充區域之間的另一個差距。

3

原因是在07年3月07日和08年3月之間沒有數據點。並且由於間隙兩側的點不屬於同一組,因此ggplot不會連接它們。簡單地說,紅色在3月07日結束,藍色在08年3月開始,兩者之間沒有任何變化。

如果您對同一個圖進行成像,但僅刪除了間隙,則這意味着x軸應同時標記爲08年3月和08年3月,其中兩條曲線接觸。

對此沒有明顯的解決方案,因爲實際上沒有數據可以繪製在間隙中。如果你想彌補差距,你必須做出決定並相應地修改你的數據。

可能作出的決定(但很可能不是一個很好的一個)是簡單地增加一個數據點,使得讀取區域填補了這個空白:

df1[11, "Date"] <- as.Date("2016-03-08") 
df1[11, "Storypoints"] <- 44 
df1[11, "Status"] <- "Completed" 
ggplot(data=df1, mapping = aes(x = Date)) + 
    geom_area(aes(y=Storypoints, fill=Status), pos = "identity") 

enter image description here

但隨着問題這很清楚:我添加的數據點不應該存在,所以08年3月情節顯示的內容實際上是誤導性的。

我不確定是否有滿意的解決方案。但也許別人有更好的主意。

+0

謝謝你的努力。雖然解決方案消除了差距,但它不能實現,因爲紅色的cateogry結束於44而不是40. – Sumedh

+3

這正是我寫的。有*是*沒有解決方案,因爲差距是您數據的一個屬性。正如我所做的那樣,彌補差距的每一種方式都會引入一個「彌補」的數據點。我的答案的重點是展示這一點。 – Stibu