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

如何从三列格式的距离文本文件绘制距离矩阵或热图?

三列距离数据转距离矩阵/热图的实现思路

核心思路

把三列(点A、点B、距离)的扁平数据,转换成对称的二维矩阵,再用可视化工具生成热图。以下是具体操作步骤(以Python工具链为例):


1. 读取并整理原始数据

用pandas读取空格分隔的文本文件,指定列名方便后续处理:

import pandas as pd

# 读取单个文件,sep='\s+'适配任意数量空格分隔
df = pd.read_csv('distance_data.txt', sep='\s+', header=None, names=['point1', 'point2', 'distance'])

# 如果是多个文件,循环读取合并(示例)
# files = ['file1.txt', 'file2.txt']
# df_list = [pd.read_csv(f, sep='\s+', header=None, names=['point1', 'point2', 'distance']) for f in files]
# combined_df = pd.concat(df_list)

2. 构建对称距离矩阵

原始数据只存储了非重复的点对(比如只存1-2,不存2-1),需要补全对称部分并填充对角线(自身距离为0):

# 获取所有唯一的点并排序,保证矩阵顺序一致
points = sorted(df['point1'].unique())

# 生成初始矩阵,缺失值先填0
dist_matrix = df.pivot_table(
    index='point1',
    columns='point2',
    values='distance',
    fill_value=0
)

# 补全对称部分(把矩阵转置后合并到原矩阵)
dist_matrix = dist_matrix.combine_first(dist_matrix.T)

# 填充对角线(自身到自身的距离为0)
for p in points:
    dist_matrix.loc[p, p] = 0

3. 绘制热图

用seaborn的热图工具直接可视化矩阵,支持标注数值、自定义配色:

import seaborn as sns
import matplotlib.pyplot as plt

# 绘制热图,annot=True显示数值,cmap指定配色方案
sns.heatmap(dist_matrix, annot=True, cmap='viridis', square=True)
plt.title('Distance Matrix Heatmap')
plt.show()

额外注意事项

  • 如果存在重复的点对数据(比如同一对出现多次),可以在pivot_table中添加aggfunc='mean'(或sum/median)来聚合数值
  • 若点ID不是连续数字(比如字符串),上述代码同样适用,sorted()会按字符串顺序排列
  • 多个文件的情况下,可以循环生成每个文件的热图,或合并数据后绘制对比热图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 20:05:42