如何在ggplot中找到堆叠条形元素的中心?

时间:2017-01-16 14:54:11

标签: r ggplot2

我在这里发布了我正在努力实现的目标Sankey bar graphs in R

我决定尝试在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)

1 个答案:

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