2017-01-16 42 views
0

我张贴在这里什么我想要实现Sankey bar graphs in R如何在ggplot中查找堆积条形图元素的中心?

我决定尝试和ggplot实现这一点,但我现在的问题是:由于下面的代码,你将如何去计算曲线DF直接从主要DF?是否有可能从图本身中提取堆叠的geom_bar元素的中心?

df <- data_frame(a=factor(c(1,2,1,2)), b=factor(c(3,3,4,4)), y = c(20,22,24,18)) 
p <- df %>% 
    ggplot(aes(x=a, y=y, group=b, fill=b, width=.3)) + 
    geom_bar(stat="identity", alpha=.9) 
p 

curves = data_frame(x=c(1,1), xend=c(2,2), 
        y=c(10, 35), yend=c(30,30), 
        weight=c(40,40), 
        width=c(10,40), 
        b=NA) 

p + 
    geom_curve(data=curves, 
      aes(x=x, y=y, xend=xend, yend=yend, size=weight), 
      curvature=.2, alpha=.4) 
+0

[相关](http://stackoverflow.com/questions/9968433/sankey-diagrams-in-r) – Axeman

+0

也许,你可能会发现[这个答案](http://stackoverflow.com/a/41655418/3817004)到Q“堆积条形图中不同元素之间绘制线条”很有用。它从绘图对象中提取数据。 – Uwe

回答

0

作为一个简单的例子如何让酒吧的中心:

library(tidyverse) 
curves2 <- df %>% 
    group_by(a) %>% 
    mutate(y = cumsum(y) - 0.5 * y) %>% 
    spread(a, y) %>% 
    rename(y = `1`, yend = `2`) %>% 
    mutate(x = 1, xend = 2) 

p + geom_curve(data=curves2, 
      aes(x=x, y=y, xend=xend, yend=yend, fill=NA,group=b), 
      curvature=.2, alpha=.4, size=12)