带地图投影的散点图(站点分布图)

散点图另一种常用的形式往往要结合地图投影来实现,也就是站点数据分布图的绘制。

关于地图投影,请见Cartopy地图投影绘制

比如在这里,绘制了中国825气象站站点的三维分布图(经纬度,颜色代表海拔高度)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import pandas as pd
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as cfeature
import cartopy.mpl.ticker as cticker
import cartopy.io.shapereader as shpreader
data = pd.read_csv("./825station.txt",sep='\s+',header=None, names=['stat','lat','lon','high'])
fig = plt.figure(figsize=(10, 8))
ax1 = fig.add_subplot(1,1,1,projection = ccrs.PlateCarree(central_longitude=105) )
#设置图形范围及刻度
ax1.set_extent([70,140,0,60], crs=ccrs.PlateCarree())
ax1.set_xticks(np.arange(70,120,10), crs=ccrs.PlateCarree())
ax1.set_yticks(np.arange(30,70,10), crs=ccrs.PlateCarree())
ax1.xaxis.set_major_formatter(cticker.LongitudeFormatter())
ax1.yaxis.set_major_formatter(cticker.LatitudeFormatter())
#绘制站点分布
s = ax1.scatter(data.lon,data.lat,s = 5,c = data.high,cmap='jet',transform=ccrs.PlateCarree())
#添加色标,fraction参数设置色标缩放比例
fig.colorbar(s,ax=ax1,fraction=0.034)
#添加海岸线等特征
ax1.add_feature(cfeature.COASTLINE.with_scale('50m'))
china = shpreader.Reader('/data/home/zenggang/yxy/shp/bou2_4l.dbf').geometries()
ax1.add_geometries(china, ccrs.PlateCarree(),facecolor='none', edgecolor='black',zorder = 1)
plt.show()

输出图形如下:

image-20200702161610554