管⽹课设——python绘制等值线
python绘制等值线(等⾼线等⽔压线等等都可)
本⼈⼤三,做给排⽔管⽹系统课设时⽼师要求绘制等⽔压线图,通常是使⽤南⽅cass或者鸿业或天正的相关插件,不过还需要专门下载,⽹盘也没有会员来不及下载,⽹上的包也怕有病毒,还不如⾃⼰动⽔,丰⾐⾜⾷,此时就要⽤到在数据处理⽅⾯堪称万能的python了。
已知⼆维横纵坐标以及相应坐标的⾼程数据(或⾃由⽔压数据或其他),通过以下代码可以得到等值线图。
点的横纵坐标通过⽼师给的cad图可以批量获取,⾼程数据不好批量导出,只能⾃⼰⼀个个从cad⾥对着打。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy.interpolate import griddata as gd
设置基本图⽚画板
如果有图且需要将等值线绘制在底图上,画板长宽⽐最好设置成与底图长宽⽐相同,这样才能在放⼤后和底图上的坐标⼀⼀对应
fig = plt.figure(figsize=(10,10))
ax = fig.add_subplot(111, facecolor='w', frame_on=False)
规定平⾯范围
这个就看坐标的跨度⾃⾏设置
numcols, numrows =1000,1000
xi = np.linspace(0,3000, numcols)
yi = np.linspace(0,3000, numrows)
xi, yi = np.meshgrid(xi, yi)
提取数据
java项目框架data = pd.read_csv('马尾规划⾼程数据.txt', delim_whitespace=True)
节点坐标数据处理以及赋值
此处需要合理设置零点,也是根据横纵坐标的跨度来确定
x,y,z = data['x'].values-77448.1299, data['y'].values-956.306396, data['⾃由⽔压'].values
#处理⾃由⽔压数据
zi =gd((x,y),data['⾃由⽔压'].values,(xi, yi),method='cubic')
等值线绘制
ps切图标注这是出图的核⼼,看不懂的可以⾃⼰上⽹搜ur()和plt.clabel()
con = ur(xi, yi, zi,20,linewidths=0.5)
plt.clabel(con, inline=10, fontsize=6)
以x标⽰节点
plt.scatter(x,y,color='#555555',edgecolor='#555555',alpha=1,marker='x',norm=0,linewidths=10,s=50,cmap=None,vmin=zi.min(), vmax=zi.max(), zorder=4)图名
plt.title("Isobaric chart")
plt.savefig("马尾规划等⽔压.png", format="png", dpi=500, transparent=True)
效果图
叠合到cad中并裁剪后效果如下:
最后附上完整代码:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
xcode中文版下载from scipy.interpolate import griddata as gd
# 设置基本图⽚画板
fig = plt.figure(figsize=(10,10))
ax = fig.add_subplot(111, facecolor='w', frame_on=False)
#规定平⾯范围
numcols, numrows =1000,1000
dockpanelxi = np.linspace(0,3000, numcols)
yi = np.linspace(0,3000, numrows)
xi, yi = np.meshgrid(xi, yi)
# 提取数据
data = pd.read_csv('马尾规划⾼程数据.txt', delim_whitespace=True)
preferred field# 节点坐标数据处理以及赋值
x,y,z = data['x'].values-77448.1299, data['y'].values-956.306396, data['⾃由⽔压'].valuespython入门教程网盘
#处理⾃由⽔压数据
zi =gd((x,y),data['⾃由⽔压'].values,(xi, yi),method='cubic')
# 等值线绘制
con = ur(xi, yi, zi,20,linewidths=0.5)
plt.clabel(con, inline=10, fontsize=6)
# 以x标⽰节点
#plt.scatter(x,y,color='#555555',edgecolor='#555555',alpha=1,marker='x',norm=0,linewidths=10,s=50,cmap=None,vmin=zi.min(), vmax=zi.max(), zorder=4) #图名
plt.title("Isobaric chart")
#保存并输出为图⽚
plt.savefig("马尾规划等⽔压.png", format="png", dpi=500, transparent=True)
如有纰漏和错误,敬请读者朋友们批评指正。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论