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

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐