You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 21:45:03