首页 >职场规划 > 内容

管网课设——python绘制等值线

2023年10月3日 21:27

python绘制等值线(等高线等水压线等等都可)

本人大三,做给排水管网系统课设时老师要求绘制等水压线图,通常是使用南方cass或者鸿业或天正的相关插件,不过还需要专门下载,网盘也没有会员来不及下载,网上的包也怕有病毒,还不如自己动水,丰衣足食,此时就要用到在数据处理方面堪称万能的python了。
已知二维横纵坐标以及相应坐标的高程数据(或自由水压数据或其他),通过以下代码可以得到等值线图。
点的横纵坐标通过老师给的cad图可以批量获取,高程数据不好批量导出,只能自己一个个从cad里对着打。

import numpy as npimport pandas as pdimport matplotlib.pyplot as pltfrom 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, 1000xi = 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)

节点坐标数据处理以及赋值

此处需要合理设置零点,也是根据横纵坐标的跨度来确定

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')

等值线绘制

这是出图的核心,看不懂的可以自己上网搜plt.contour()和plt.clabel()

con = plt.contour(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 npimport pandas as pdimport matplotlib.pyplot as pltfrom 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, 1000xi = 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)# 节点坐标数据处理以及赋值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')# 等值线绘制con = plt.contour(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)

如有纰漏和错误,敬请读者朋友们批评指正。


参考文章:https://blog.csdn.net/wanht001/article/details/113360409

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时候联系我们修改或删除,在此表示感谢。

特别提醒:

1、请用户自行保存原始数据,为确保安全网站使用完即被永久销毁,如何人将无法再次获取。

2、如果上次文件较大或者涉及到复杂运算的数据,可能需要一定的时间,请耐心等待一会。

3、请按照用户协议文明上网,如果发现用户存在恶意行为,包括但不限于发布不合适言论妄图

     获取用户隐私信息等行为,网站将根据掌握的情况对用户进行限制部分行为、永久封号等处罚。

4、如果文件下载失败可能是弹出窗口被浏览器拦截,点击允许弹出即可,一般在网址栏位置设置

5、欢迎将网站推荐给其他人,网站持续更新更多功能敬请期待,收藏网站高效办公不迷路。

      



登录后回复

共有0条评论