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

如何基于两个DataFrame数据绘制带权重连线的散点图?

实现基于DataFrame的点连线可视化(按关联度调整线条粗细)

先准备所需库和示例数据:

import pandas as pd
import matplotlib.pyplot as plt

# 构造conn表
conn_data = {
    'A': [1, 2, 5, 6],
    'B': [3, 7, 20, 2],
    'relevance': [0.7, 0.1, 2, 7]
}
conn = pd.DataFrame(conn_data)

# 构造point表
point_data = {
    'Point': [1, 2, 3, 20],
    'Lat': [45.3, 34.4, 40.2, 40.4],
    'Lon': [-65.2, -60.2, -60.1, -63.1]
}
point = pd.DataFrame(point_data).set_index('Point')  # 设置Point为索引,方便快速查找

数据关联与可视化步骤:

  1. 关联起点/终点的经纬度:通过point表的索引快速匹配conn表中A、B对应的坐标
  2. 绘制散点图:先画出所有点位
  3. 循环绘制连线:根据relevance值设置线条粗细,关联度越高线条越粗

完整可视化代码:

# 创建画布
plt.figure(figsize=(10, 6))

# 绘制所有点位的散点图
plt.scatter(point['Lon'], point['Lat'], s=100, c='blue', label='点位')

# 循环处理conn表的每一行(注意是iterrows()不是interrows())
for _, row in conn.iterrows():
    start_id = row['A']
    end_id = row['B']
    rel = row['relevance']
    
    # 跳过point表中不存在的点(比如示例中的7、5、6)
    if start_id not in point.index or end_id not in point.index:
        continue
    
    # 获取起点和终点的经纬度
    start_lon, start_lat = point.loc[start_id, 'Lon'], point.loc[start_id, 'Lat']
    end_lon, end_lat = point.loc[end_id, 'Lon'], point.loc[end_id, 'Lat']
    
    # 绘制连线,线条粗细与relevance成正比,乘以2放大差异
    plt.plot([start_lon, end_lon], [start_lat, end_lat], 
             linewidth=rel*2, color='red', alpha=0.7)

# 添加图表元素
plt.xlabel('经度(Lon)')
plt.ylabel('纬度(Lat)')
plt.title('点位关联可视化(线条粗细=关联度×2)')
plt.legend()
plt.grid(alpha=0.3)

# 显示图形
plt.show()

关键说明:

  • 把point表的Point列设为索引,用loc快速匹配坐标,比循环查找更高效
  • 加入了不存在点位的判断,避免因point表中无对应数据报错
  • 线条粗细用rel*2是为了放大不同关联度的视觉差异,可根据需求调整倍数
  • 原代码中interrows是拼写错误,正确为iterrows();且row[1][3]索引错误,推荐用列名row['relevance']更清晰易读

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 04:25:23