python matplotlib绘制等高线、等值线图
需求,是技术进步的原动力。先描述需求,并进行需求分析,再进行技术路线选型和编码实现。
一、需求描述
给附件1文件,是三列数据,想要如图这样的效果。
二、需求分析
这是典型的等值线、等高线图,虽然和平时的等值线图(下图)不一样,是因为进行了显示范围的控制。
三、技术选型
使用python,第三方库pandas读取和操作数据,scipy进行数据插值,matplotlib绘图。很常规的技术路线。
上源码:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import Rbf#引入径向基函数
filename=r'0.txt'#数据文件地址,附件1
df=pd.read_csv(filename,sep="\t")#读取文件
df1=df["1"]#读取第一列数据
df2=df['2']#读取第二列数据
df3=df['3']#读取第三列数据
odf1=np.linspace(600,1900,50)#设置网格经度
odf2=np.linspace(50,450,50)#设置网格纬度
odf1,odf2=np.meshgrid(odf1,odf2)#网格化
func=Rbf(df1,df2,df3,function='linear')#定义插值函数plt.cm.hot
odf3_new=func(odf1,odf2)#获得插值后的网格累计降水量
plt.contourf(odf1,odf2,odf3_new,levels=np.arange(odf3_new.min(),odf3_new.max(),(odf3_new.max()-odf3_new.min())/10),cmap='GnBu',extend='both')#画图
# 添加等高线
line = plt.contour(odf1,odf2,odf3_new,levels=np.arange(odf3_new.min(),odf3_new.max(),(odf3_new.max()-odf3_new.min())/10))
plt.clabel(line , inline=True, fontsize=12)
plt.show()
附件1:
1 2 3
600 65.80201497 3.30887844
700 110.1730945 6.920773738
800 126.627907 8.127946036
900 149.0330662 8.381793273
1000 178.0055814 10.177284
1100 236.627907 9.161352855