R根据需要创建覆盖美国和其他空间图层底图的空间气泡图

Lea*_*ser 2 plot bubble-chart r ggplot2 ggmap

我正在尝试生成一个覆盖美国底图的漂亮泡泡图(如果可以的话,我可以导入一个shapefile,但我一直在使用R底图。

library(ggplot2,sp,raster,maps,mapdata,maptools,ggmap,rgeos)
myData = data.frame(name=c("Florida","Colorado","california","Harvard","Yellowstone"),
                lat=c(28.1,39,37,42,44.6), 
                long=c(-81.6,-105.5,-120,-71,-110),
                pop=c(280,156,128,118,202))
Run Code Online (Sandbox Code Playgroud)

使用下面的这段代码,我改编自另一个堆栈溢出帖子(使用卫星地图在R中创建气泡图),可以将气泡图覆盖在美国地图上。但是,渲染速度非常慢,范围太紧,限制在一个盒子中,我无法根据自己的判断将其他图层添加到绘图中,并且底图较厚且视觉上不干净。

xy <- myData[,c("long", "lat")]
nl <- getData('GADM', country="USA", level=1) #raster data, format SpatialPolygonsDataFrame
nl <- gSimplify(nl, tol=0.01, topologyPreserve=TRUE)
# coercing the polygon outlines to a SpatialLines object
spl <- list("sp.lines", as(nl, "SpatialLines"))
SPDF <- SpatialPointsDataFrame(coords=xy, data=myData)
coordinates(myData) <- c("lat", "long")
projection(SPDF)<- "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs +towgs84=0,0,0"
coordinates(SPDF)[1:5,] #retrieves spatial coordinates form the dataframe
bubble(SPDF, "pop", sp.layout=spl, main="This is It!")
Run Code Online (Sandbox Code Playgroud)

我可以使用此代码绘制一个漂亮的底图。我在地图上添加了点,但是这些点的大小没有按照数据中的弹出列来确定。而且我可以在此地图上添加其他图层。但是我可以像使用气泡图一样控制点的大小和符号本身吗?

map(database= "world", ylim=c(45,90), 
    xlim=c(-160,-50), col="grey80", 
    fill=TRUE, projection="gilbert", 
    orientation= c(90,0,225))

coord <- mapproject(myData$lon, myData$lat, proj="gilbert",orientation=c(90, 0, 225))
points(coord, pch=20, cex=1.2, col="red") 
Run Code Online (Sandbox Code Playgroud)

任何人都可以引导我找到在R中绘制气泡图的最佳方法,在那里我可以调整气泡图中符号的填充和轮廓,并且可以添加干净的底图,这样我可以a)控制(填充和线条)和b)向其添加其他层(例如,另一个shapefile层)。

预先感谢您的任何建议。

jaz*_*rro 5

这可能会有所帮助。我用自己的方式回答了您的问题。这可能是实现您可能想要执行的操作的简单操作。对于地图,GADM很棒。但是,有些软件包已经有了地图。在这里,您可以通过以下方式轻松获得“州”地图。然后,您可以使用绘制地图ggplot2geom_path绘制美国并在中geom_point添加数据点。myData如果要控制中的气泡大小ggplot2,可以使用sizeaes

library(map)
library(ggplot2)

# Get US map
usa <- map_data("state")

# Draw the map and add the data points in myData

ggplot() +
geom_path(data = usa, aes(x = long, y = lat, group = group)) +
geom_point(data = myData, aes(x = long, y = lat, size = pop), color = "red") 
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明