如何绘制邮政编码及其 'centre of mass'

How to plot postcodes and their 'centre of mass'

我认为 R 对此有好处...但我完全是个新手。我有一组英国邮政编码(例如 'CB2 8UR')和一个单独的 table,它将每个邮政编码映射到一个 OS 网格坐标。两者都以 CSV 开头:

file1:
  "pcd"
  "CB2 8UR"
  "TE3 5LJ"

file2:
  "pcd","col2","col3","oseast1m","osnrth1m","col6",...
  ...
  "CB2 8UR","?","?",9823,2034,"?"
  ...

真实的file1有几千个条目,真实的file2有几十万(大约20列)。此处 file2 的唯一要点是将邮政编码转换为 UK OS 网格坐标。目前,我想我可以将坐标视为在二维平面上。

任务是获取地图,其中每个邮政编码的 'centre of mass' 与邮政编码的热图表示一起标记。

我确实设法使用 qplot() + stat_bin2d():

将 file2 数据(即所有英国邮政编码)绘制为 bin
m <- qplot(xlab="Longitude",ylab="Latitude",main="Postcode heatmap",geom="blank",x=pcd$oseast1m,y=pcd$osnrth1m,data=pcd)  + stat_bin2d(bins =200,aes(fill = log1p(..count..))) 

其中 pcd 是 data.frame 从文件 2 中读取的

所以:

非常感谢您的帮助。

这是可能有助于您进步的代码。首先,基于玩具数据框,我们使用 dplyr 包根据 pcd 变量合并两个数据文件。

那么这超出了我的熟悉范围,但我提供了一些代码来找到你的数据的质心并绘制它们。

library(dplyr)
post.codes <- data.frame(id = c(1, 2), pcd = c("CB2 8UR", "TE3 5LJ"))

coords <- data.frame(pcd = c("CB2 8UR", "TE3 5LJ"), coord1 = c("9823", "5555"),  coord2 = c("2034", "1234"), 
                    othervar = c("XYZ", "ABC"), stringsAsFactors = FALSE)

merged <- left_join(post.codes, coords, by = "pcd")

接下来,使用内置统计数据包中的 kmeans 查找并添加质心。我希望这段代码超越了伪代码,但只是定向的。

merged$centroid <- cbind(kmeans(merged$[the variable to cluster, 2)$cluster)

centroids <- df %>% group_by(centroid) %>% summarise(average = mean(centroid))
library(ggplot2)
ggplot(centroids, aes([coord1, coord2, color=factor(notsurewhatgoes here))) +
  geom_point(size=3)+ geom_point(data=centroids, size=5)

第三,如果你想标记或突出显示某些代码(质心?),一般的方法是创建一个新的因子变量,其中要突出显示的代码为 TRUE,其他代码为 FALSE。然后在 ggplot 中你根据那个因素做一些事情,比如 fill = highlight factor。然后所有 TRUE 将具有一种填充颜色,其余所有将具有另一种默认颜色。您可以使用 scale_fill_manual(values = c("yourdesiredcolor", "yourseconddesiredcolor") 来选择除默认

以外的颜色