首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在ggplot2中将地图与复杂的点显示结合起来?

如何在ggplot2中将地图与复杂的点显示结合起来?
EN

Stack Overflow用户
提问于 2012-12-01 08:45:37
回答 1查看 3.4K关注 0票数 7

我正在尝试用非洲的背景地图绘制研究地点的点。我可以独立创建这两个,但我很难将它们叠加在一起。

我使用的非洲地图是来自maplibrary.org的Esri shapefile。它可以从我在https://www.dropbox.com/s/etqdw3nky52czv4/Africa%20map.zip的dropbox中找到。我有一个文本文件中的点,也可以从我的drop box中获得。https://www.dropbox.com/s/scvymytjsr5pvaf/SPM-437-22Nov12.txt。他们指的是关于疟疾寄生虫分子抗药性的研究。我想把它们画出来,颜色是带有抗药遗传标记的寄生虫的比例,大小是测试的寄生虫的数量。

独立绘制点:

代码语言:javascript
复制
qplot(Longitude, Latitude, data = d.spm.437, colour = Frc437, size = Tot437)

绘制非洲地图:

代码语言:javascript
复制
library(maptools)
africa = readShapePoly("Africa.shp")
africa.map = fortify(africa, region="COUNTRY")
qplot(long, lat, data = africa.map, geom="path", group=group)

任何帮助将这两个放在一起,同时保留点的显示,将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-01 10:12:55

试试这样的东西。看起来对我很管用。我认为你的一些经度坐标是错误的。geom_pointfill颜色当前设置为Tot437,因此您可能想要更改此颜色。

代码语言:javascript
复制
library(ggplot2)
library(rgdal)

africa <- readOGR("c:/test", layer = "Africa")
africa.map = fortify(africa, region="COUNTRY")

africa.points = read.table("c:/test/SPM-437-22Nov12.txt", header = TRUE, sep = ",")
names(africa.points)[which(names(africa.points) == 'Longitude')] <- 'long' # rename lat and long for consistency with shp file
names(africa.points)[which(names(africa.points) == 'Latitude')] <- 'lat'

ggplot(africa.map, aes(x = long, y = lat, group = group)) +
    geom_polygon(colour = "black", size = 1, fill = "white", aes(group = group)) +
    geom_point(data = africa.points, aes(x = long, y = lat, fill = Tot437, group = NULL), size = 4, shape = 21, colour = "black", size = 3)

顺便说一句,查看您的地图可能很难获得单个区域的详细视图,因此解决此问题的一种方法是通过子集,在本例中使用数据框。你可以这样做:

代码语言:javascript
复制
africa.map <- africa.map[africa.map$id == 'Madagascar', ]
africa.points <- africa.points[africa.points$Country == 'Madagascar', ]
ggplot(africa.map, aes(x = long, y = lat, group = group)) +
    geom_polygon(colour = "black", size = 1, fill = "white", aes(group = group)) +
    geom_point(data = africa.points, aes(x = long, y = lat, fill = Tot437, group = NULL), size = 2, shape = 21, colour = "black", size = 2)

...which应该会让你得到类似这样的东西:

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13655230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档