2013-03-03 72 views
3

我有來自2001年人口普查的通勤者流量數據。我使用reshape2 R包中的melt將其從「平面」轉換爲「長」形式,並將原點和目的地放在同一行,因爲ggplot2只接受數據幀輸入。如何在基於流矩陣的ggplot2中繪製流程

我的問題是我已經結束了每行的數據翻倍,因此每行(行)都有一個原點和一個目的地。我確信有一個更簡潔的解決方案,可能涉及更長的數據形式。

爲了使問題具體,我已經產生了小的工作例如,從赫裏福德:

# prepare data + packages 
library(ggplot2) 
library(ggmap) 
flows.mini <- flows.ft[1:100,] 
save(flows.mini, file="flows.mini.RData") 
load("flows.mini.RData") 
head(flows.mini) 

variable X.1 value  X1.x  X2.x  X1.y  X2.y n nr 
1 00GANY 00GANY 605 -2.699389 52.06554 -2.699389 52.06554 605 1 
2 00GANY 00GAPA 135 -2.742064 52.04099 -2.699389 52.06554 135 2 
3 00GANY 00GAQD 25 -2.733890 51.93402 -2.699389 52.06554 25 3 
    fcols 
1 500+ 
2 100-500 
3 10-100 

要重現從最後兩行所採取的措施,請下載RDATA文件(2 KB):http://dl.dropbox.com/u/15008199/flows.mini.RData並再現劇情:

mini-flows-plot

這是我是如何繪製它:

# plot flows by doubling-up 
hford <- qmap("hereford", source = "stamen", maptype = "toner", extent = "normal", maprange=FALSE) 

hford + geom_path(data= flows.mini, aes(x=c(X1.x,X1.y), y=c(X2.x, X2.y), 
     group = c(nr, nr), color = c(fcols,fcols), size= c(n,n)), 
     lineend = "round") + 
    scale_size_continuous(range = c(0.05,5)) + 
    scale_color_discrete(breaks = c("0-10", "10-100", "100-500", "500+")) + 
    coord_map() 

我認爲你會同意雙重屬性效率低下,所以,重新提出我的問題:我該如何刪除它們?

+0

爲什麼你使用'geom_path'?你的不同行彼此相連嗎? – juba 2013-03-03 23:08:38

+0

沒理由; geom_lines似乎產生相同的結果。我嘗試了兩種方法,在這種情況下可以看到兩者之間沒有區別...... – RobinLovelace 2013-03-04 07:44:40

回答

3

我不確定我是否真的明白這個問題,但是如果您使用geom_segment而不是geom_path,它是否解決了您描述的「加倍屬性」的問題?

喜歡的東西:

hford + geom_segment(data= flows.mini, aes(x=X1.x,y=X2.x, xend=X1.y, yend=X2.y, 
     group = nr, color = fcols, size= n), 
     lineend = "round") + 
    scale_size_continuous(range = c(0.05,5)) + 
    scale_color_discrete(breaks = c("0-10", "10-100", "100-500", "500+")) + 
    coord_map() 

enter image description here

+0

是的,它回答了這個問題。這是關於如何避免使用2n作爲屬性案例的數量(已解決)以及更一般地關於如何使用ggplot2繪製流數據的具體查詢。我認爲你的答案也可能解決了後一個問題,因爲細分市場似乎是爲這些應用程序設計的,並且可以用箭頭顯示方向:http://docs.ggplot2.org/0.9.3/geom_segment.html。將調查箭頭的變化屬性。謝謝。 – RobinLovelace 2013-03-04 07:49:16