2013-03-03 70 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