2017-01-16 45 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)