实现效果:
R语言中ggplot2包提供绘制地图、散点图的方法,是实现在矢量地图上绘制分级设色散点图核心包
- 绘制多边形 geom_polygon(data,aes,fill, colour)
- 绘制点 geom_point
- .....
0、需要用到的包
library(maptools) # 读取shp数据常用,可以将shp数据读取为SpatialPolygonsDataFrame 格式,为DataFrame(数据帧)子类,也称为空间多边形数据帧
library(ggplot2) #绘图核心类
library(plyr) #join方法 合并两个单元格用(空间数据+属性数据),实现相当于ArcGIS中的空间连接
1、读取底图shp数据
所需数据:图层格式为多边形的shp文件即可。
底图可以使用shp数据直接读入,利用maptools包
#导入地理信息数据:
china_map <- readShapePoly("geodata/TP_WGS84.shp") # 读取地图信息数据
china_map1 <- fortify(china_map) #转化为数据框
china_map使用maptools包中的读取shp多边形方法读入, china_map格式为SpatialPolygonsDataFrame
由于ggplot2绘制地图需要用到 特定的数据框格式,使用ggplot2提供的fortify(方法),将其SpatialPolygonsDataFrame 转化为如下格式
long lat order hole piece id group
1 87.15341 27.83085 1 FALSE 1 0 0.1
2 87.08135 27.89600 2 FALSE 1 0 0.1
3 87.05430 27.93455 3 FALSE 1 0 0.1
4 87.00324 27.94043 4 FALSE 1 0 0.1
5 86.93428 27.95976 5 FALSE 1 0 0.1
6 86.88593 28.02092 6 FALSE 1 0 0.1
2、读取散点图信息数据
所需数据:保存为csv格式的 带坐标的数据,e.g.
即使用简单读入csv的方法
mydata <- read.csv("data/T_rescpannual.csv") #读取业务数据
3、使用ggplot2可视化渲染
ggplot()+
geom_polygon(data=china_map1, aes(x=long, y=lat, group=group), fill="grey95", colour="grey60")+
geom_point(data=mydata, aes(x = long,y = lat, size=4, fill=X1983, alpha=0.3), shape=21, colour="black")+
# scale_size_area(max_size=4)+
scale_fill_gradient2(low="DarkCyan", mid="Azure", high="Sienna", midpoint=0)+
coord_map("polyconic") +ggtitle("Annual temperature of meteorological stations in Tibet Plateau")+
theme(
panel.grid = element_blank(),
panel.background = element_blank(),
axis.text = element_blank(),
axis.ticks = element_blank(),
axis.title = element_blank(),
legend.position = "bottom"
)
全部代码:
library(maptools)
library(ggplot2)
library(plyr)
#导入地理信息数据:
china_map <- readShapePoly("geodata/TP_WGS84.shp") # 读取地图信息数据
china_map1 <- fortify(china_map) #转化为数据框
#业务数据导入及作图数据合并:
mydata <- read.csv("data/T_rescpannual.csv") #读取业务数据
#province_city <- read.csv("c:/rstudy/chinaprovincecity.csv") #读取省会城市坐标
china_data <- join(province_city, mydata, type="full") #合并两个数据框
#地图语句:
ggplot()+
geom_polygon(data=china_map1, aes(x=long, y=lat, group=group), fill="grey95", colour="grey60")+
geom_point(data=mydata, aes(x = long,y = lat, size=4, fill=X1983, alpha=0.3), shape=21, colour="black")+
# scale_size_area(max_size=4)+
scale_fill_gradient2(low="DarkCyan", mid="Azure", high="Sienna", midpoint=0)+
coord_map("polyconic") +ggtitle("Annual temperature of meteorological stations in Tibet Plateau")+
theme(
panel.grid = element_blank(),
panel.background = element_blank(),
axis.text = element_blank(),
axis.ticks = element_blank(),
axis.title = element_blank(),
legend.position = "bottom"
)
参考文献:
https://www.cnblogs.com/nxld/p/6059603.html