与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)
这给出了
我的问题是现在添加轮廓,如我所提到的示例中所示。我可以在colour="black"
中使用geom_bar()
,但这会在条形图之间添加看起来非常难看的垂直线条。
有没有人建议获得这些大纲?解决方案不必基于geom_bar
。
如果可能的话,我也对只有深灰色部分有轮廓的解决方案感兴趣,因为这个轮廓有一个重要的解释。也许这可能基于geom_line()
的一些转移版本?
答案 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
答案 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")
我对更简单的解决方案感兴趣!