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

如何在循环绘制的Matplotlib图表中添加另一DataFrame的文本

问题修复方案

核心问题梳理

  1. 数据框初始化拼写错误:wshddata应为wshdarea
  2. 未定义ax变量,导致transform=ax.transAxes报错
  3. 无需嵌套循环,直接通过LINE_ID匹配wshdf的ID字段,提取对应面积数据即可
  4. plt.text的坐标与变换方式不匹配:使用transAxes时,坐标是相对坐标轴的比例值(范围0-1),而非实际数据坐标

修正后的完整代码

import pandas as pd
import matplotlib.pyplot as plt

# 修复数据框初始化的变量名错误
wshdarea = [[1,1840,745],[2,18548,7506],[3,19109,7733]]
wshdf = pd.DataFrame(wshdarea, columns=['ID','Acres','Hectares'])

stackprofile = pd.DataFrame([[0,1180,1],
                           [5,1181,1],
                           [10,1182,1],
                           [0,1173,2],
                           [5,1174,2],
                           [10,1173,2],
                           [0,1166,3],
                           [5,1166,3],
                           [10,1165,3]], columns=['FIRST_DIST','FIRST_Z','LINE_ID'])

ymin = stackprofile['FIRST_Z'].min()
ymax = stackprofile['FIRST_Z'].max()
    
groupby = stackprofile.groupby('LINE_ID')    
lines = list(stackprofile['LINE_ID'].unique())

# 替换为你的实际结果目录路径
resultsdir = "./results"

for i in lines:    
    line1 = groupby.get_group(i)
    x = line1['FIRST_DIST']
    y = line1['FIRST_Z']
    
    plt.figure(figsize=(18,14))
    # 获取当前轴对象,解决ax未定义问题
    ax = plt.gca()
    
    plt.scatter(x, y, c="blue", s=10)
    plt.plot(x,y, c="green")
    plt.ylim((ymin - .5), ymax)
    plt.xlabel('距离(FIRST_DIST)')
    plt.ylabel('高程(FIRST_Z)')
    
    # 匹配当前LINE_ID对应的面积数据
    wshd_data = wshdf[wshdf['ID'] == i].iloc[0]
    # 在图表右上角添加面积文本,用transAxes保证位置相对固定
    text_content = f"ID: {i}\n面积(英亩): {wshd_data['Acres']}\n面积(公顷): {wshd_data['Hectares']}"
    plt.text(0.95, 0.95, text_content,
             horizontalalignment='right',
             verticalalignment='top',
             transform=ax.transAxes,
             fontsize=12,
             bbox=dict(facecolor='white', alpha=0.8))
    
    plt.savefig(f"{resultsdir}\\profile{str(i)}_test.jpg")
    plt.close()  # 关闭画布释放内存

关键修改说明

  • 修正了wshdf初始化的变量名错误
  • 用plt.gca()获取当前轴对象,解决变换参数报错问题
  • 通过ID匹配直接提取对应面积数据,省略不必要的嵌套循环
  • 调整文本位置为相对坐标轴的固定区域,添加背景框提升可读性
  • 修正坐标轴标签为实际业务含义,增加plt.close()避免内存占用过高

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 01:25:04