Python 画专题图

Python 画专题图

最近在搞毕设的绘图工作,基本上用python完成了大部分的出图工作,搞明白了就很方便并且超级爽啊,matplotlib库真的好用呀,和单纯在ArcGIS里出图是完全不一样滴感觉

是做台风对海域的影响分析,所以主要是处理完的海色数据成图(源数据是MODIS的L3 SMI,nc格式,在matlab里做的数据格式转化和批量融合,裁剪是用的arcpy,画图转到python是因为matlab的配色太太太辣眼睛了)加上叠加台风路径的shp(是个线的shp),数据融合完存成了tif。总体来说matplotlib库和matlab还是挺像的,所以哪怕是新手整体就也还挺简单的。

里面有些小的细节挺磨人的,比如说空值掩膜这种,解决起来花了一点时间,然后就是叠加shp的时候,全靠坐标做导引,栅格图的坐标信息是靠tfw文件里提供的空间信息搞定的。

##代码

import cv2
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import pandas as pd
from skimage import data, exposure, img_as_float
from matplotlib import patheffects
import shapefile
import gdal
import matplotlib.ticker as mticker

#加载shp文件
path=shapefile.Reader('D:/gd/台风路径/path.shp')
border=path.shapes()
border_points = border[0].points
b1 = border[1].points
x0,y0 = zip(*border_points)
x1,y2=zip(*b1)

#加载tif图像
img = cv2.imread("D:/gd/process_data/2019/global_mean/mask/2019_chl_after_all_mask.tif",-1)
step = 0.0416618454#相元大小
xs = 117.3822496076#起始经度
ys = 41.4290284989#最高纬度
x = np.arange(xs,xs+232*step,step)
y = np.arange(ys-234*step,ys,step)
X,Y = np.meshgrid(x,y)#设置格点的坐标网
mask1=img<0#去除无值点
msmask = np.ma.array(img, mask=mask1)
gam1= exposure.adjust_gamma(msmask, 0.00000000002)#对图像进行拉伸处理(gama变换),突出空间变化特征
zs=np.flipud(gam1)#默认的原点是左下点,tif坐标是从右上开始的,所以要进行镜像翻转,不然南北朝向是错的

#开始画图
plt.axes([0.1, 0.2, 0.8, 0.8])
sty=plt.cm.CMRmap
plt.pcolor(X,Y,zs,cmap=sty)#tif影像成图
plt.plot(x0,y0,'k-',x1,y2,'k-')#shp线成图
plt.gca().yaxis.set_major_formatter(mticker.FormatStrFormatter('%0.f °N'))#设置坐标轴单位为经纬度
plt.gca().xaxis.set_major_formatter(mticker.FormatStrFormatter('%0.f °E'))

#加图例
ax=plt.axes([0.1, 0.095, 0.8, 0.05])
norm = mpl.colors.Normalize(msmask.min(),msmask.max())
h= mpl.colorbar.ColorbarBase(ax,cmap=sty,norm=norm,orientation='horizontal')
h.set_ticks([msmask.min(),msmask.max()])
h.set_label('chlorophyll_a concentration(chl-a,mg/m^3'+')')
plt.savefig('abcd.png',dpi=300)
xxx=plt.show()

你可能感兴趣的:(毕设)