gpt4 book ai didi

r - 如何基于流矩阵在ggplot2中绘制流

转载 作者:行者123 更新时间:2023-12-02 00:11:17 25 4
gpt4 key购买 nike

我有 2001 年人口普查的通勤流量数据。我使用 reshape2 R 包中的 melt 将其从“扁平”形式转换为“长”形式,并将起点和终点放在同一行中,因为 ggplot2 仅接受数据帧输入.

我的问题是我最终将每一行的数据加倍,以便每一行(行)都有一个起点和一个终点。我确信有一个更简洁的解决方案,可能涉及更长形式的数据。

为了使问题具体化,我从 Hereford 制作了一个小的工作示例:

# 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()

我想你会同意双重属性是低效的,所以,重新表述我的问题:我怎样才能删除它们?

最佳答案

我不确定我是否真的理解这个问题,但是如果你使用 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

关于r - 如何基于流矩阵在ggplot2中绘制流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15191898/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com