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

如何关联三个TXT文件数据并绘制带颜色区分的散点图?

FE模型数据关联与散点图实现指导

我需要生成一张按数值区分颜色的散点图,但FE模型导出的数据存在关联逻辑问题:每个单元对应4个节点(4组坐标),但多个单元共用的节点仅会被记录一次坐标。目前我有三个txt文件:

  • 包含单元编号及绘图用分析数据的文件
  • 包含单元编号与对应节点编号的文件
  • 包含节点编号与对应坐标的文件

以下是我已尝试的初始代码:

from numpy import loadtxt
from fpdf import FPDF

Sek = ['Sektion_100']
I = 0
HeaderY =['nr.','LC','Element nr.','Myy','Nyy','MRd_y','URy']
HeaderX =['nr.','LC','Element nr.','Mxx','Nxx','MRd_x','URx']

pdf = FPDF(orientation = 'P', unit = 'mm', format = 'A4')
MaxURx =[]
MaxURy =[]

# 加载分析数据
data = loadtxt("Loads/Sektion_150.txt", unpack=False, skiprows=1)
nr = data[:,1]
Mxx = data[:,2]
Nxx = -data[:,4]
Myy = data[:,3]
Nyy = -data[:,5]

# 加载单元-节点拓扑数据
topologi = loadtxt("Loads/Sektion_150_topologi.txt", unpack=False, skiprows=1)
nr1 = topologi[:,0]
node1 = topologi[:,1]
node2 = topologi[:,2]
node3 = topologi[:,3]
node4 = topologi[:,4]

# 加载节点坐标数据
knuder = loadtxt("Loads/Sektion_150_knuder.txt", unpack=False, skiprows=1)
nr2 = knuder[:,0]
x = knuder[:,1]
y = knuder[:,2]
z = knuder[:,3]

实现方向指导

1. 构建节点坐标映射字典

先把节点编号和坐标做一对一映射,后续可以直接通过节点编号快速获取坐标,避免重复循环查找:

# 构建节点编号到(x,y,z)坐标的映射
node_coords = {}
for row in knuder:
    node_id = int(row[0])  # 确保节点编号为整数,避免匹配误差
    node_coords[node_id] = (row[1], row[2], row[3])

2. 关联单元、节点与分析数据

遍历拓扑文件中的每个单元,匹配对应的分析数据(比如用于配色的URx/URy),再逐个获取节点坐标:

# 先构建单元编号到目标分析值的映射(这里以URx为例)
unit_analysis = {}
for row in data:
    unit_id = int(row[1])  # data中第二列是Element nr.
    urx_val = row[6]  # 对应HeaderX中的URx列
    unit_analysis[unit_id] = urx_val

# 整合所有绘图所需数据
plot_points = []
for row in topologi:
    unit_id = int(row[0])
    # 获取当前单元的4个节点编号
    current_nodes = [int(row[1]), int(row[2]), int(row[3]), int(row[4])]
    # 获取该单元的配色数值
    color_val = unit_analysis.get(unit_id)
    if not color_val:
        continue  # 跳过无分析数据的单元
    
    # 逐个节点提取坐标,加入绘图列表
    for node_id in current_nodes:
        coords = node_coords.get(node_id)
        if coords:
            # 这里选择x,y坐标绘图,可根据需求换成x/z或y/z
            plot_points.append( (coords[0], coords[1], color_val) )

3. 绘制带颜色区分的散点图

使用matplotlib实现可视化,颜色由分析数值决定:

import matplotlib.pyplot as plt

# 拆分绘图数据
xs = [p[0] for p in plot_points]
ys = [p[1] for p in plot_points]
color_values = [p[2] for p in plot_points]

# 绘制散点图
plt.scatter(xs, ys, c=color_values, cmap='viridis')
plt.colorbar(label='URx 数值')  # 标注颜色对应的参数
plt.xlabel('X 坐标')
plt.ylabel('Y 坐标')
plt.title('FE模型节点散点图(按URx值配色)')
plt.show()

关键注意事项

  • 确保所有编号(单元、节点)统一为整数类型,避免因浮点型导致匹配失败
  • 对缺失数据(比如无对应分析数据的单元、无坐标的节点)做跳过处理,防止报错
  • 可根据需求调整绘图的坐标维度(比如用x-z平面),只需修改plot_points中的坐标索引即可

内容的提问来源于stack exchange,提问作者Mandsberg1

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 06:55:20