一、利用geojson绘制二维地图
利用geojson绘制地图主要利用matplotlib的PolyCollection。准备好geojson地图数据,利用geojson库load函数加载geojson数据,然后用PolyCollection逐个绘制多边形。
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import geojson as json
from matplotlib.collections import PolyCollection
#读入geojson数据
json_data=json.load(open("d:/中华人民共和国.json",encoding='utf-8'))
ax=plt.subplot()
#设置绘图显示的范围,如不设置范围,则无法显示
ax.set_xlim(70,140)
ax.set_ylim(15,57)
poly=json_data['features']
#绘制地图
for i in range(0,len(poly)):
try:
po=poly[i]['geometry']["coordinates"]
lc = PolyCollection(po[0], edgecolor='black', facecolor='green', closed=False)
ax.add_collection(lc)
except(ValueError):
po=poly[i]['geometry']["coordinates"]
lc = PolyCollection(po, edgecolor='black', facecolor='green', closed=False)
ax.add_collection(lc)
except:
pass
#显示地图
Plt.show()
二、绘制三维数据地图
参照结合上面绘制二维地图的方面,可以绘制三维数据地图。下面以疫情确证数为例子说明绘制三维数据地图。
从百度疫情实时大数据报告网站下载疫情数据(网址为:https://voice.baidu.com/act/newpneumonia/newpneumonia?fraz=partner&paaz=gjyj),下面绘制各地累计确诊数的三维数据地图。
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import geojson as json
from matplotlib.collections import PolyCollection
import geopandas as gp
import pandas as pd
#读入疫情数据
data=pd.read_csv("d:/name.csv",encoding="gb18030")
#读入地图数据以获得省份内部代表性的点
gdata=gp.read_file("d:/中华人民共和国.json")
ax = plt.subplot(111, projection='3d')
ax.set_xlim(70,140)
ax.set_ylim(15,57)
#绘制地图
for i in range(0,len(poly)):
try:
po=poly[i]['geometry']["coordinates"]
lc = PolyCollection(po[0], edgecolor='black', facecolor='green', closed=False)
ax. add_collection3d(lc)
except(ValueError):
po=poly[i]['geometry']["coordinates"]
lc = PolyCollection(po, edgecolor='black', facecolor='green', closed=False)
ax. add_collection3d(lc)
except:
pass
绘制三维BAR图
for i in range(0,len(data["累计"])):
ax.bar3d(gdata.representative_point().x[i],gdata.representative_point().y[i],0,0.5,0.5, data["累计"][i],color= "red")plt.axis('off')
#显示数据地图
plt.show()
,