构建具有离散变量轮廓的区域图(即带有步骤)

时间:2015-06-01 09:54:58

标签: r ggplot2 geom-bar

geom_area plot with areas and outlines ggplot类似,我试图用轮廓构建堆积区域图。由于我的变量是离散的,我使用geom_bar()来叠加它们。代码如下:

require(ggplot2)
require(reshape)
x = 0:4
y1 = c(3,2,2,1,0)
y2 = c(1,1,0,0,0)
data = data.frame(x,y1,y2)
data.plot <-melt(data, id.vars = "x")
cols = c(y1="darkgrey",y2="lightgrey") 
p = ggplot(data.plot,aes(x=x,y=value,fill=variable))
p +  geom_bar(aes(width=1),stat = "identity") + theme_bw() +  scale_fill_manual(values=cols) 

这给出了Stacked barplot

我的问题是现在添加轮廓,如我所提到的示例中所示。我可以在colour="black"中使用geom_bar(),但这会在条形图之间添加看起来非常难看的垂直线条。

有没有人建议获得这些大纲?解决方案不必基于geom_bar

如果可能的话,我也对只有深灰色部分有轮廓的解决方案感兴趣,因为这个轮廓有一个重要的解释。也许这可能基于geom_line()的一些转移版本?

2 个答案:

答案 0 :(得分:2)

这是另一种使用annotate("path")的方法。这个建议有一些路径组件的硬编码值,但我怀疑有一种方法可以通过算法填充这些值(可能是gg_build()

p <- ggplot(data.plot,aes(x=x, y=value, fill=variable))
p <- p + geom_bar(aes(width=1), stat = "identity") + theme_bw() +  scale_fill_manual(values=cols)
p <- p + annotate(x=c(-.5, 0.5, 0.5, 2.5, 2.5, 3.5, 3.5),
                  y=c(3, 3,   2,   2,   1,   1,   0  ), group = 1,  "path", color = "black", size = 2)
p <- p + annotate(x=c(min(x)-.5, min(x)+0.5, min(x)+0.5, min(x)+2.5, min(x)+2.5, min(x)+3.5, min(x)+3.5),
                  y=c(max(value), max(value), max(value)- 1,  max(value)- 1,  max(value)- 2,  max(value)- 2,  min(value)), group = 1,  "path", color = "black", size = 2)
p

enter image description here

答案 1 :(得分:1)

您的绘图代码(我不想使用var ejs = require('ejs'); ... app.set('view engine', 'ejs'); ejs.rmWhitespace = true; ... ,因为这是一个函数):

c

现在沿着条形添加一个步进线:

p <- ggplot(data.plot, aes(x = x, y = value, fill = variable))
p <- p + geom_bar(aes(width = 1), stat = "identity") + theme_bw() +  scale_fill_manual(values = cols)

沿轴修正一条线要多做一些工作:

p <- p + geom_step(aes(x = x - 0.5), position = "stack")

plot

我对更简单的解决方案感兴趣!