【python利用shp文件进行绘图白化】

python白化

  • 白化的作用
  • python实现

白化的作用

  • 参考博文【matlab利用shp文件制作mask白化文件】

python实现

  • python借助shp文件对绘图进行白化,不需要进行mask文件的制作,可以高效地进行区域绘制
import numpy as np
import cartopy.crs as ccrs
import cartopy.feature as cf
import matplotlib.pyplot as plt
import cartopy.io.shapereader as shpreader
from cartopy.mpl.ticker import LatitudeFormatter,LongitudeFormatter
from matplotlib.path import Path
from cartopy.mpl.patch import geos_to_path
plt.rcParams['font.sans-serif']=['KaiTi']
shp_path=r'.\省.shp'
shp_data=shpreader.Reader(shp_path)
fig=plt.figure(figsize=(3,2),dpi=500)
ax1=plt.subplot(121,projection=ccrs.PlateCarree())
ax2=plt.subplot(122,projection=ccrs.PlateCarree())
for i,ax in enumerate([ax1,ax2]):
    ax.add_geometries(shp_data.geometries(),crs=ccrs.PlateCarree(),edgecolor='k',facecolor='none',lw=0.5)
    ax.set_extent([70, 140, 0, 55],crs=ccrs.PlateCarree())
    ax.set_xticks(np.arange(70,140,5))
    ax.set_yticks(np.arange(0,55,5))
    # ax.xaxis.set_major_formatter(LongitudeFormatter())
    # ax.yaxis.set_major_formatter(LatitudeFormatter())
    ax.tick_params(direction='in',labelsize=3,top=True,right=True,length=2,width=0.5)
    if i==0:
            ax.set_title('未白化',fontsize=6)
    else:
            ax.set_title('白化后',fontsize=6)
########定义绘图数据######################
x=np.arange(70, 140, 0.02)
y=np.arange(0, 55, 0.02)
X,Y=np.meshgrid(x,y)
Z=(X-108)**2+(Y-29)**2
#######循环画图#########################
for i,ax in enumerate([ax1,ax2]):
    if i==0:
        ax.contourf(X,Y,Z)
    else:
        ac=ax.contourf(X,Y,Z)
#######获取path#######################
records=shp_data.records()
for record in records:
    if record.attributes["省"] in ["河南省"]:
        path=Path.make_compound_path(*geos_to_path([record.geometry]))
#######白化###########################
for collection in ac.collections:
    collection.set_clip_path(path, transform=ax2.transData)

file_nineline = ".\九段线.shp"
reader_nineline = shpreader.Reader(file_nineline)
ax.add_geometries(reader_nineline.geometries(), crs=ccrs.PlateCarree(), lw=0.5, fc='none')

plt.show()

【python利用shp文件进行绘图白化】_第1张图片

  • 参考:https://mp.weixin.qq.com/s?__biz=MzIxODQxODQ4NQ==&mid=2247484487&idx=1&sn=e654ab7eeeb41a15f816b52b391e93cb&chksm=97eb981da09c110ba06115ed93a4a4450bbe84f8b57b90a9819b6b06f801b533c1b002f14223&scene=21

你可能感兴趣的:(数据可视化,python,开发语言)