本节提要:对绘图的白化部分做一个总结。
ac=ax.contourf(...)clip=maskout.shp2clip(ac, ax,r'E:\dijishi\cn_province.shp' ,420000)


#如何简单理解白化import numpy as npimport matplotlib.pyplot as pltimport matplotlib.path as mpathplt.rcParams['font.sans-serif']=['KaiTi']#英文新罗马字体plt.rcParams['axes.unicode_minus']=Falsefig=plt.figure(figsize=(3,1.5),dpi=500)vertices=[(-5,-5),(-5,5),(5,5),(5,-5),(-5,-5)]boundary=mpath.Path(vertices)x=np.arange(-10,10,1)y=np.arange(-10,10,1)x,y=np.meshgrid(x,y)z=x**2+y**2ax1=plt.subplot(121)ax2=plt.subplot(122)ac1=ax1.contourf(x,y,z)ac2=ax2.contourf(x,y,z)for i in ac1.collections:i.set_clip_path(boundary,transform=ax1.transData)for i in vertices:ax1.text(i[0],i[1],i,fontsize=4)for ax in [ax1,ax2]:ax.tick_params(direction='in',labelsize=2,top=True,right=True,width=0.3,length=2)ax1.set_title('白化等值线后',fontsize=5)ax2.set_title('白化等值线前',fontsize=5)

import numpy as npimport cartopy.crs as ccrsimport cartopy.feature as cfimport matplotlib.pyplot as pltimport cartopy.io.shapereader as shpreaderfrom cartopy.mpl.ticker import LatitudeFormatter,LongitudeFormatterfrom matplotlib.path import Pathfrom cartopy.mpl.patch import geos_to_pathplt.rcParams['font.sans-serif']=['KaiTi']shp_path=r'E:\My Documents\桌面\利川市地图\利川.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([108.3,109.35,29.7,30.7],crs=ccrs.PlateCarree())ax.set_xticks(np.arange(108.3,109.35,0.2))ax.set_yticks(np.arange(29.7,30.7,0.2))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(108.3,109.35,0.01)y=np.arange(29.7,30.7,0.01)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:path=Path.make_compound_path(*geos_to_path([record.geometry]))#######白化###########################for collection in ac.collections:collection.set_clip_path(path,transform=ax2.transData)


import syssys.path.append(r"C:\Users\lenovo\Desktop")import maskout
from scipy.interpolate import Rbf#引入径向基函数import pandas as pdimport numpy as npfilename=r'C:\Users\lenovo\Desktop\example.xlsx'df=pd.read_excel(filename)lon=df['lon']#站点经度lat=df['lat']#站点纬度data=df['data']#站点数据olon=np.linspace(108.3,109.35,500)#格点经度olat=np.linspace(29.7,30.7,500)#格点纬度olon,olat=np.meshgrid(olon,olat)func=Rbf(lon,lat,data,function='linear')data_new=func(olon,olat)olonolatdata_new #插值后的格点数据

df_new=pd.DataFrame(dict(lon=olon.flatten(),lat=olat.flatten()))df_new['data']=data_new.flatten()df_new

df_geo=gpd.GeoDataFrame(df_new,geometry=gpd.points_from_xy(df_new['lon'],df_new['lat']),crs='EPSG:4326')df_geo

a=gpd.read_file(r'E:\map\利川.shp',encoding='UTF-8')a

此时还可以查验a的crs:
a.crs

df_clip=gpd.clip(df_geo,a)df_clip

ac1=ax.scatter(olon,olat,s=0.1,marker='s',#s代表正方形markerc=data_new,cmap='Spectral_r')ac=ax2.scatter(df_clip['lon'],df_clip['lat'],s=0.1,marker='s',c=df_clip['data'],cmap='Spectral_r')fig.colorbar(ac,ax=[ax1,ax2])

olon=np.linspace(108.3,109.35,40)olat=np.linspace(29.7,30.7,40)

ac=ax.scatter(olon,olat,s=9,marker='s',c=data_new,cmap='Spectral_r')print(data_new.shape)df_grid=pd.DataFrame(dict(lon=olon.flatten(),lat=olat.flatten()))df_grid['data']=data_new.flatten()lichuan_shp=fiona.open(r'E:\家园\利川市地图\利川.shp',encoding='utf-8')a=gpd.read_file(r'E:\家园\利川市地图\利川.shp',encoding='utf-8')pol=lichuan_shp.next()poly_data=pol['geometry']['coordinates'][0]shp_polygeon=Polygon(poly_data)mask_value=[value if shp_polygeon.contains(Point(lon,lat))==True\else np.nan for lon,lat,value in zip(df_grid['lon'],df_grid['lat'],df_grid['data'])]ax.scatter(olon,olat,s=9,marker='s',c=mask_value,cmap='Spectral_r')

ac=ax.contourf(olon,olat,data_new,cmap='Spectral_r')print(data_new.shape)df_grid=pd.DataFrame(dict(lon=olon.flatten(),lat=olat.flatten()))df_grid['data']=data_new.flatten()lichuan_shp=fiona.open(r'E:\家园\利川市地图\利川.shp',encoding='utf-8')a=gpd.read_file(r'E:\家园\利川市地图\利川.shp',encoding='utf-8')pol=lichuan_shp.next()poly_data=pol['geometry']['coordinates'][0]shp_polygeon=Polygon(poly_data)mask_value=[value if shp_polygeon.contains(Point(lon,lat))==True\else np.nan for lon,lat,value in zip(df_grid['lon'],df_grid['lat'],df_grid['data'])]df_grid['mask_value']=mask_valuemask_grid=df_grid['mask_value'].values.reshape(40,40)ax2.contourf(olon,olat,mask_grid,cmap='Spectral_r')


import matplotlib.pyplot as pltimport numpy as npimport cartopy.crs as ccrsimport cartopy.io.shapereader as shpreaderimport shapefilefrom matplotlib.path import Pathfrom cartopy.mpl.ticker import LatitudeFormatter,LongitudeFormatterplt.rcParams['font.sans-serif']=['KaiTi']shp_path=r'E:\My Documents\桌面\利川市地图\利川.shp'shp_data=shpreader.Reader(shp_path)fig=plt.figure(figsize=(3,2),dpi=600)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([108.3,109.35,29.7,30.7],crs=ccrs.PlateCarree())ax.set_xticks(np.arange(108.3,109.35,0.2))ax.set_yticks(np.arange(29.7,30.7,0.2))ax.xaxis.set_major_formatter(LongitudeFormatter())ax.yaxis.set_major_formatter(LatitudeFormatter())if i==0:ax.set_title('未白化',fontsize=6)ax.tick_params(direction='in',labelsize=3,top=True,right=True,length=2,width=0.5)else:ax.set_title('白化后',fontsize=6)ax.tick_params(direction='in',labelsize=3,top=True,right=True,length=2,width=0.5)########定义绘图数据######################x=np.arange(108,109.5,0.05)y=np.arange(29.7,30.7,0.05)lon_num=len(x)lat_num=len(y)lons,lats=np.meshgrid(x,y)Z=(lons-108)**2+(lats-29)**2#######################################sf=shapefile.Reader(shp_path)Shapes=sf.shapes()boundary=Shapes[0].pointsp= Path(boundary)grib=np.stack((lons,lats),axis=-1)mask=p.contains_points(grib.reshape(lat_num*lon_num,2))mask=mask.reshape(lat_num,lon_num)ax2.scatter(lons[mask],lats[mask],s=12,c=Z[mask],cmap='viridis',marker='s')ax1.scatter(lons,lats,s=12,c=Z,cmap='viridis',marker='s')

文章转载自气海无涯,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




