2016-03-01 91 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