Python pandas读取txt格式SEM等高线数据,并通过matplotlib绘制等高线云图

文章目录

  • 前言
  • 效果
  • 核心代码
    • 编程思路
    • 脚本文件
    • 解释


前言

  需求如下:通过.txt格式的DEM文件(即 数字高程模型(Digital Elevation Model))绘制等高线云图。
  通过python数据科学处理库numpy、pandas以及matplotlib三个库实现绘制等高线云图。


效果

  等高线云图如下图所示。

  绘图所需的输入内容,即.txt格式的DEM文件如下图所示。文本格式文件,每两个数据之间通过“一个tab键”间隔,每3600个(我的文件中是3600个)数据之间有一个“回车键”进行分隔。每个数据均通过科学计数法计数。
Python pandas读取txt格式SEM等高线数据,并通过matplotlib绘制等高线云图_第1张图片


核心代码

编程思路

  通过pandas库直接读取文本文件中的数据到一个二维数组中去,再通过matplotlib绘图的contour函数一步绘制。

脚本文件

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

n = 3600
x = np.linspace(1, 3600, n)
y = np.linspace(1, 3600, n)
X, Y = np.meshgrid(x, y)   # 每个点的横坐标、纵坐标分别形成的2维矩阵, X与Y是两个形状相同的2维矩阵
Z = pd.read_csv("DEM-whgt.txt", sep='   ', header=None, dtype='float')

plt.figure(figsize=(16, 16), dpi=10) # dpi分辨率
# C = plt.contourf(X, Y, Z, line_mum, colors='black', linewidths=.5)
C = plt.contourf(X, Y, Z)
# plt.clabel(C, inline=True, fontsize=12)  # 图中画出等高线的数值
line_mum = 50
plt.contourf(X, Y, Z, line_mum, alpha=0.75, cmap='jet')
# plt.colorbar() # 绘制色棒

plt.axis('off')   # 去坐标轴
plt.xticks([])    # 去 x 轴刻度
plt.yticks([])    # 去 y 轴刻度
plt.savefig("./333.png", bbox_inches='tight', pad_inches=0)
# bbox_inches='tight', pad_inches=0 去白边
# "./{}_resized.jpg".format(image_name.split(".jpg")[0]) 保留原始图像的名字并在后面加上_resized
plt.show()

解释

n = 3600
x = np.linspace(1, 3600, n) # 在[1,3600]区间内等距生成n个数字,形成数组x
y = np.linspace(1, 3600, n)
X, Y = np.meshgrid(x, y)  # 这里的X,Y均为2维数组

每个点的横坐标、纵坐标分别形成的2维矩阵, X与Y是两个形状相同的2维矩阵

np.meshgrid(x,y)

这句话通过数组x,y生成一一对应的网格化数据,X,Y形状大小均为3600×3600,X为对应位置坐标点的横坐标,Y为对应位置坐标点的纵坐标

Z = pd.read_csv("DEM-whgt.txt", sep='   ', header=None, dtype='float')

通过pandas读取txt文档内容

plt.contourf(X, Y, Z, line_mum, alpha=0.75, cmap='jet')

通过contourf函数绘制等高线图,line_num为等高线的数量,cmap为色棒的类型。

你可能感兴趣的:(python,python,matplotlib,pandas)