如何结合在GGPLOT2点的复杂显示的地图?(How do you combine a map wi

2019-07-04 08:38发布

我试图从研究基地与非洲的背景地图绘制点。 我可以创建两个独立的,但我有一个困难时期上海誓山盟的顶部覆盖它们。

非洲地图我使用的是从maplibrary.org ESRI的shape文件。 它可以从我的Dropbox的https://www.dropbox.com/s/etqdw3nky52czv4/Africa%20map.zip 。 我有一个文本文件中的点,也可以从我的下拉框。 https://www.dropbox.com/s/scvymytjsr5pvaf/SPM-437-22Nov12.txt 。 他们提到对疟原虫的分子耐药性研究。 我想绘制它们,这样的颜色是寄生虫与耐药性遗传标记的比例和大小测试的寄生虫数量。

独立绘制点:

qplot(Longitude, Latitude, data = d.spm.437, colour = Frc437, size = Tot437)

非洲绘制的地图:

library(maptools)
africa = readShapePoly("Africa.shp")
africa.map = fortify(africa, region="COUNTRY")
qplot(long, lat, data = africa.map, geom="path", group=group)

在将这些两者结合起来,同时保留点的显示任何帮助,将不胜感激。

Answer 1:

尝试这样的事情。 似乎为我工作。 我认为你的一些纬度和经度坐标是错误的,但。 将fill颜色geom_point当前设置为Tot437所以你可能想改变这种状况。

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)

顺便说一下,看你的地图,你可能有困难得到个别地区的一个很好的详细视图,这样一个方式来处理,这将是由子集,在这种情况下,与数据帧。 你可以这样做:

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)

......这应该让你与此类似:



文章来源: How do you combine a map with complex display of points in ggplot2?