2017-06-13 35 views
0

我試圖在某些時間點繪製兩組之間的「流量」。將「流量」添加到geom_bar

在下面的例子:

d1=data.frame(c(1:6), 
       c("A","B","A","A","B","A"), 
       c("A","B","B","A","B","B") 
      ) 

names(d1)=c("id","time1","time2") 

require(reshape2) 
m1=melt(d1,id.vars="id") 

require(ggplot2) 
ggplot(m1,aes(x=variable,fill=value))+ 
    geom_bar(stat="count",width = 0.5) 

個體編號從基團A 3和6「開關」 B組之間觀測「時間1」和「時間2」。我正在尋找一個可能性來繪製這個。試過geom_polygon但沒有成功。

這是我希望得到:選民之間的流動:
2個人住在A組和2個個人切換組2

[1]

更復雜的例子可以看這裏兩次選舉。

[2] http://cdn1.salzburg24.at/2013/05/Waehlerstroeme-650x435.jpg

有沒有辦法用ggplot實現這一目標?

+0

搜索條件,這將有助於你的是「熱平衡圖」,或「桑基圖」。在ggplot2中沒有原生的geom,但是還有其他的包可以生成Sankey圖表*,例如*'networkD3'。 – neilfws

+1

這是一個[沖積圖](http://bc.bojanorama.pl/2014/03/alluvial-diagrams/)?有一個名爲*沖積*的軟件包可以創建沖積圖。它看起來像有人正在* ggplot2 *擴展[這裏](https://github.com/corybrunson/ggalluvial)。 – aosmith

+0

謝謝你,沖積圖正是我正在尋找的! – twckr

回答

0

謝謝aosmith!

這產生的結果,我預計:

require(alluvial) 

d2=aggregate(d1[,2], 
      by= d1[, c('time1','time2')], 
      FUN=function(x) length(x)) 

names(d2)[3]="Freq" 

alluvial(d2[,1:2],freq=d2$Freq)