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

使用DataFrame绘制填充等高线图时出现Z维度类型错误

问题原因及解决方案

错误根源

  1. contourf参数传递错误:你把X和Y用列表[X,Y]包裹传给contourf,这会让第一个参数变成3D数组(X和Y都是2D,列表包裹后维度为(2,5,6)),但contourf要求前两个输入是独立的2D坐标网格,第三个是对应形状的2D数值数组。
  2. 坐标类型不匹配:df.columns是字符串类型,直接用于meshgrid会导致Y轴坐标无法正确解析为数值,影响绘图逻辑。
  3. Z的形状与X/Y不匹配:df.values的形状是(6,5)(6行5列),而np.meshgrid(x,y)生成的X和Y形状是(5,6),两者维度不对应,需要转置Z来匹配。

修正后的代码

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

data = {'10.2': [72,57,56,67,69,136], '10.6':[31,23,19,17,41,74],
        '10.9': [27,96,97,99,18,40], '11.3':[10,98,100,35,67,258], '11.8':[124,92,49,24,88,209]}

df = pd.DataFrame(data)

# 将列名转为数值类型,避免字符串坐标问题
x = df.index
y = df.columns.astype(float)
X, Y = np.meshgrid(x, y)

# 转置Z,让形状与X/Y匹配(X/Y是(5,6),Z转置后从(6,5)变为(5,6))
Z = df.values.T

# 正确调用contourf,分开传递X、Y、Z
c = plt.contourf(X, Y, Z)
plt.colorbar(c)
plt.show()

关键修正点说明

  • 把plt.contourf([X, Y], Z)改成plt.contourf(X, Y, Z),这是直接触发报错的核心原因。
  • 用df.columns.astype(float)将字符串列名转为浮点数,确保Y轴是可计算的数值坐标。
  • 对df.values做转置.T,让Z的形状和X、Y的网格形状完全对应,保证每个坐标点都有匹配的数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 17:42:22