geom_area的情节区域的差距

时间:2016-03-01 14:47:29

标签: r ggplot2

我想根据因子变量" Status"来区分绘图颜色的区域。我使用fill = Status,但是,我看到了绘图区域的中断。关于如何避免这种情况以及为什么会发生这种情况的任何想法/建议?

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

3 个答案:

答案 0 :(得分:4)

原因是在07年3月到08年3月期间没有数据点。由于间隙两侧的点不属于同一组,因此ggplot不会连接它们。简单地说,红色在07年3月结束,蓝色在2008年3月开始,两者之间没有任何东西。

如果您对相同的绘图进行成像,但只是删除了间隙,这将意味着x轴应该同时标记,Mar 07 Mar 08,两条曲线都接触。

没有明显的解决方案,因为实际上没有数据可以在差距中绘制。如果您想填补空白,您必须做出决定并相应地修改您的数据。

一个可能的决定(但很可能不是一个非常好的决定)就是简单地添加一个数据点,使读取区域填补空白:

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月显示的内容实际上是误导性的。

我不确定是否有一个令人满意的解决方案。但也许别人有更好的主意。

答案 1 :(得分: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

答案 2 :(得分:-2)

我认为这是因为ggplot无法确定该区域属于哪种状态,因此要使用哪种颜色。

我引入了另一种状态,并在填充区域之间产生了另一个差距。