Python实现绘制Matlab格式的地图边框的示例代码_第1页
Python实现绘制Matlab格式的地图边框的示例代码_第2页
Python实现绘制Matlab格式的地图边框的示例代码_第3页
Python实现绘制Matlab格式的地图边框的示例代码_第4页
Python实现绘制Matlab格式的地图边框的示例代码_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第Python实现绘制Matlab格式的地图边框的示例代码目录1、Python绘制色斑图2、Python绘制比例尺、指南针3、Python绘制Matlab格式的地图边框

1、Python绘制色斑图

importmatplotlib.pyplotasplt

importnumpyasnp

fromcartopy.mpl.tickerimportLongitudeFormatter,LatitudeFormatter

importcartopy.crsasccrs

importcartopy.featureascfeature

importpandasaspd

importmaskout

importmatplotlib.patchesasmpatches

fromcartopy.io.shapereaderimportReader

frommatplotlibimportrcParams

config={"font.family":'TimesNewRoman',"font.size":16,"mathtext.fontset":'stix'}

rcParams.update(config)

df1=pd.read_excel(r"F:/Rpython/lp37/henanmap/henan.xlsx")

lat=df1['lat']

lon=df1['lon']

PM25=df1['PM25']

#设置经纬度并用scipy包中的函数插值

fromerpolateimportRbf

olon=np.linspace(110,117,100)

olat=np.linspace(31,37,100)

olon,olat=np.meshgrid(olon,olat)

#插值处理,‘linear',‘nearest',‘cubic'

#cubic,gaussian,inverse_multiquadric,linear,multiquadric,quintic,thin_plate

#rain_data_new=griddata((lon,lat),data,(olon,olat),method='linear')

func1=Rbf(lon,lat,PM25,function='linear')

PM25=func1(olon,olat)

print(olon)

print(olat)

print(PM25)

print(olat.shape)

print(PM25.shape)

#建立画布

fig2=plt.figure(figsize=(16,12))

proj=ccrs.PlateCarree()

leftlon,rightlon,lowerlat,upperlat=(110,117,31,37)#根据上下限确定范围,至少为10°

#春------------------------------------------------------------------------------------

#左底宽高

ax=fig2.add_subplot(1,1,1,projection=ccrs.PlateCarree())

#在画布的绝对坐标建立子图

ax.set_extent([leftlon,rightlon,lowerlat,upperlat],crs=ccrs.PlateCarree())

#设置地图属性:加载国界、海岸线,land为灰色

ax.stock_img()

#绘制河南省行政边界

ticks=np.arange(30,80,5)

cf=ax.contourf(olon,olat,PM25,levels=ticks,cmap='gist_rainbow',transform=ccrs.PlateCarree(),extend='both')

clip1=maskout.shp2clip(cf,ax,'F:/Rpython/lp37/henanmap/henan1')

cf=plt.colorbar(cf,ticks=ticks,shrink=0.96,orientation='vertical',extend='both',pad=0.01,aspect=35)

ax.add_feature(cfeature.COASTLINE.with_scale('50m'),linewidth=0.5,zorder=2,color='k')#添加海岸线

ax.add_feature(cfeature.LAKES.with_scale('50m'))

ax.add_feature(cfeature.RIVERS.with_scale('50m'))

ax.add_feature(cfeature.OCEAN.with_scale('50m'))

ax.add_feature(cfeature.LAND.with_scale('50m'))

ax.add_geometries(Reader(r'F:/Rpython/lp37/henanmap/henan1.shp').geometries(),ccrs.PlateCarree(),facecolor='none',edgecolor='k',linewidth=1.2,zorder=1)

ax.add_geometries(Reader(r'F:/Rpython/lp27/data/river1.shp').geometries(),ccrs.PlateCarree(),facecolor='none',edgecolor='b',linewidth=0.2)

ax.add_geometries(Reader(r'F:/Rpython/lp27/data/china1.shp').geometries(),ccrs.PlateCarree(),facecolor='none',edgecolor='r',linewidth=1.2)

ax.add_geometries(Reader(r'F:/Rpython/lp27/data/china2.shp').geometries(),ccrs.PlateCarree(),facecolor='none',edgecolor='r',linewidth=0.8)

ax.add_geometries(Reader(r'F:/Rpython/lp27/data/ne_50m_lakes.shp').geometries(),ccrs.PlateCarree(),facecolor='none',edgecolor='k',linewidth=0.2)

ax.add_geometries(Reader(r'F:/Rpython/lp37/data37/river/1级河流.shp').geometries(),ccrs.PlateCarree(),facecolor='none',edgecolor='RoyalBlue',linewidth=0.4)

ax.add_geometries(Reader(r'F:/Rpython/lp37/data37/river/2级河流.shp').geometries(),ccrs.PlateCarree(),facecolor='none',edgecolor='DodgerBlue',linewidth=0.3)

ax.add_geometries(Reader(r'F:/Rpython/lp37/data37/river/3级河流.shp').geometries(),ccrs.PlateCarree(),facecolor='none',edgecolor='DeepSkyBlue',linewidth=0.2)

ax.add_geometries(Reader(r'F:/Rpython/lp37/data37/river/4级河流.shp').geometries(),ccrs.PlateCarree(),facecolor='none',edgecolor='SkyBlue',linewidth=0.15)

ax.add_geometries(Reader(r'F:/Rpython/lp37/data37/river/5级河流.shp').geometries(),ccrs.PlateCarree(),facecolor='none',edgecolor='LightSkyBlue',linewidth=0.05)

ax.add_geometries(Reader(r'F:/Rpython/lp37/data37/river/主要湖泊.shp').geometries(),ccrs.PlateCarree(),edgecolor='none',linewidth=0,facecolor='#BEE8FF')

#以下6条语句是定义地理坐标标签格式

ax.set_xticks(np.arange(leftlon,rightlon+0.1,1),crs=ccrs.PlateCarree())

ax.set_yticks(np.arange(lowerlat,upperlat+0.1,1),crs=ccrs.PlateCarree())

lon_formatter=LongitudeFormatter()

lat_formatter=LatitudeFormatter()

ax.xaxis.set_major_formatter(lon_formatter)

ax.yaxis.set_major_formatter(lat_formatter)

plt.savefig('F:/Rpython/lp37/plot185.4.png',dpi=600,bbox_inches='tight',pad_inches=0)

plt.show()

2、Python绘制比例尺、指南针

#添加比例尺,指南针

defadd_north(ax,labelsize=18,loc_x=0.95,loc_y=0.99,width=0.06,height=0.09,pad=0.14):

画一个比例尺带'N'文字注释

主要参数如下

:paramax:要画的坐标区域Axes实例plt.gca()获取即可

:paramlabelsize:显示'N'文字的大小

:paramloc_x:以文字下部为中心的占整个ax横向比例

:paramloc_y:以文字下部为中心的占整个ax纵向比例

:paramwidth:指南针占ax比例宽度

:paramheight:指南针占ax比例高度

:parampad:文字符号占ax比例间隙

:return:None

minx,maxx=ax.get_xlim()

miny,maxy=ax.get_ylim()

ylen=maxy-miny

xlen=maxx-minx

left=[minx+xlen*(loc_x-width*.5),miny+ylen*(loc_y-pad)]

right=[minx+xlen*(loc_x+width*.5),miny+ylen*(loc_y-pad)]

top=[minx+xlen*loc_x,miny+ylen*(loc_y-pad+height)]

center=[minx+xlen*loc_x,left[1]+(top[1]-left[1])*.4]

triangle=mpatches.Polygon([left,top,right,center],color='k')

ax.text(s='N',

x=minx+xlen*loc_x,

y=miny+ylen*(loc_y-pad+height),

fontsize=labelsize,

horizontalalignment='center',

verticalalignment='bottom')

ax.add_patch(triangle)

#-----------函数:添加比例尺--------------

defadd_scalebar(ax,lon0,lat0,length,size=0.01):

ax:坐标轴

lon0:经度

lat0:纬度

length:长度

size:控制粗细和距离的

#style3

ax.hlines(y=lat0,xmin=lon0,xmax=lon0+length/111,colors="black",ls="-",lw=1,linewidth=3,label='%dkm'%(length))

ax.vlines(x=lon0,ymin=lat0-size,ymax=lat0+size,colors="black",ls="-",lw=1,linewidth=3)

ax.vlines(x=lon0+length/2/111,ymin=lat0-size,ymax=lat0+size,colors="black",ls="-",lw=1,linewidth=3)

ax.vlines(x=lon0+length/111,ymin=lat0-size,ymax=lat0+size,colors="black",ls="-",lw=1,linewidth=3)

ax.text(lon0+length/111,lat0+size+0.05,'%d'%(length),horizontalalignment='center')

ax.text(lon0+length/2/111,lat0+size+0.05,'%d'%(length/2),horizontalalignment='center')

ax.text(lon0,lat0+size+0.05,'0',horizontalalignment='center')

ax.text(112.28,31.45,'km',horizontalalignment='center')

3、Python绘制Matlab格式的地图边框

defdrow_the_scale(y,x,text,length=1.5,lw=5):

#画比例尺函数

#y代表比例尺所在纬度

#x代表比例尺开始的经度

#text代表比例尺最后刻度值

#length代表比例尺的长度,单位为多少个经度

#lw代表比例尺的宽度

step=length/5#计算步长,画五格

#画黑白线五条

plt.hlines(y=y,xmin=x,xmax=x+step,colors="black",ls="-",lw=lw)

plt.hlines(y=y,xmin=x+step,xmax=x+step*2,colors="white",ls="-",lw=lw)

plt.hlines(y=y,xmin=x+step*2,xmax=x+step*3,colors="black",ls="-",lw=lw)

plt.hlines(y=y,xmin=x+step*3,xmax=x+step*4,colors="white",ls="-",lw=lw)

plt.hlines(y=y,xmin=x+step*4,xmax=x+step*5,colors="black",ls="-",lw=lw)

#画长刻度两个

plt.vlines(x=x,ymin=y-(lw/100)*3,ymax=y+lw/100,colors="black",ls="-",lw=1)

plt.vlines(x=x+length,ymin=y-(lw/100)*3,ymax=y+lw/100,colors="black",ls="-",lw=1)

#画段刻度四个

plt.vlines(x=x+step,ymin=y-(lw/100)*2,ymax=y+lw/100,colors="black",ls="-",lw=1)

plt.vlines(x=x+step*2,ymin=y-(lw/100)*2,ymax=y+lw/100,colors="black",ls="-",lw=1)

plt.vlines(x=x+step*3,ymin=y-(lw/100)*2,ymax=y+lw/100,colors="black",ls="-",lw=1)

plt.vlines(x=x+step*4,ymin=y-(lw/100)*2,ymax=y+lw/100,colors="black",ls="-",lw=1)

#写字,0,500,km

plt.text(x,y-(lw/100)*7,'0',horizontalalignment='center')

plt.text(x+length,y-(lw/100)*7,text,horizontalalignment='center')

plt.text(x+length/2,y+(lw/100)*2,'km',horizontalalignment='center')

defdrowscale(extent,scale_y,scale_x,scale_text,step=5,lw=10,scale_length=1.5,scale_lw=5):

#画地图黑白边框和比例尺

#extent:表示四周经纬度[west,east,south,north]

#scale_y,scale_x,scale_text:代表比例尺的位置,纬度,经度,刻度值

#step:表示步长,一格代表几个经纬度

#lw:代表边框

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论