我有来自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并再现剧情:
这是我是如何绘制它:
# 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()
我认为你会同意双重属性效率低下,所以,重新提出我的问题:我该如何删除它们?
为什么你使用'geom_path'?你的不同行彼此相连吗? – juba 2013-03-03 23:08:38
没理由; geom_lines似乎产生相同的结果。我尝试了两种方法,在这种情况下可以看到两者之间没有区别...... – RobinLovelace 2013-03-04 07:44:40