使用pandas导入含分隔线的立体摄影测量文本并处理平板振动变形绘图问题
立体摄影测量平板振动数据处理及等高线绘制方案
场景说明
- 实验目标:研究带/不带边界条件的平板振动特性,采集变形数据
- 核心需求:基于立体摄影测量输出的多帧文本数据,绘制对应变形等高线图
常见问题解决方案
问题1:分隔行导致pandas无法正常读入文件
无需提前转Excel,可在读取阶段直接过滤--------格式的分隔行,代码示例:
import pandas as pd # 方案1:简单加载全量数据,自动过滤分隔行 with open("你的数据文件路径.txt", "r", encoding="utf-8") as f: # 过滤所有以短横线开头的分隔行、空行 valid_lines = [line.strip() for line in f if line.strip() and not line.strip().startswith("---")] # 读取清理后的数据,sep参数根据实际列分隔符调整:多空格分隔用\s+,制表符分隔用\t df = pd.read_csv(pd.compat.StringIO("\n".join(valid_lines)), sep="\s+")
如果文件有表头,上述代码会自动识别;如果无表头,可在
read_csv中添加header=None参数,手动指定names=["x坐标", "y坐标", "变形量"]等自定义列名。
问题2:多帧数据拆分
如果分隔行是不同帧数据的边界,可在读取时直接按帧拆分存储,方便后续逐帧绘图:
import pandas as pd frame_data_list = [] current_frame_lines = [] frame_index = 0 with open("你的数据文件路径.txt", "r", encoding="utf-8") as f: for line in f: stripped_line = line.strip() # 遇到分隔行时存储当前帧数据 if stripped_line.startswith("---"): if current_frame_lines: frame_df = pd.read_csv(pd.compat.StringIO("\n".join(current_frame_lines)), sep="\s+") frame_df["frame_id"] = frame_index frame_data_list.append(frame_df) current_frame_lines = [] frame_index += 1 continue if stripped_line: current_frame_lines.append(stripped_line) # 存入最后一帧数据 if current_frame_lines: frame_df = pd.read_csv(pd.compat.StringIO("\n".join(current_frame_lines)), sep="\s+") frame_df["frame_id"] = frame_index frame_data_list.append(frame_df) # 合并为总表,可按需筛选单帧数据 all_frames_df = pd.concat(frame_data_list, ignore_index=True)
等高线图绘制示例
以单帧数据为例,假设数据包含x、y坐标列和变形量z列:
import matplotlib.pyplot as plt import numpy as np # 筛选第0帧数据,可按需调整帧序号 target_frame = all_frames_df[all_frames_df["frame_id"] == 0] x = target_frame["x"].values y = target_frame["y"].values z = target_frame["z"].values # 生成网格数据 xi = np.linspace(x.min(), x.max(), 100) yi = np.linspace(y.min(), y.max(), 100) zi = plt.mlab.griddata(x, y, z, xi, yi, interp="linear") # 绘制等高线 plt.contourf(xi, yi, zi, cmap="RdBu_r", levels=20) plt.colorbar(label="平板变形量") plt.xlabel("X方向坐标") plt.ylabel("Y方向坐标") plt.title("第0帧平板变形等高线") plt.show()
内容的提问来源于stack exchange,提问作者Bradley Mc Master
相关产品推荐
相关产品推荐

