如何绘制邮政编码及其质量中心'

时间:2015-03-19 02:22:56

标签: r ggplot2 postal-code

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

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

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

真正的file1有大约一千个条目,而真正的file2有几十万个(大约20列)。这里file2的唯一要点是将邮政编码转换为英国操作系统网格坐标。目前,我认为我可以将坐标视为二维飞机。

任务是获得一张地图,每张邮戳的“质心”标记在一起,并附有邮政编码的热图表示。

我确实设法使用qplot()+ stat_bin2d()将file2数据(即所有英国邮政编码)绘制为垃圾箱:

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是从file2读取的data.frame。

所以:

  • 如何合并file1和file以仅映射file1中的代码但使用file2中的coords?

  • 如何计算和添加质心的标记?

  • 如果我想将某些邮政编码标记为'特殊',那么他们的“质量”高于正常情况,这样做会很简单吗?

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:0)

以下是可能有助于您取得进步的代码。首先,基于玩具数据框,我们使用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")

接下来,使用内置stats包中的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。然后,所有TRUES将具有一种填充颜色,其余所有其他颜色将具有其他默认颜色。您可以使用scale_fill_manual(values = c("yourdesiredcolor", "yourseconddesiredcolor")选择默认颜色以外的颜色