使用DataFrame绘制填充等高线图时出现Z维度类型错误
问题原因及解决方案
错误根源
- contourf参数传递错误:你把
X和Y用列表[X,Y]包裹传给contourf,这会让第一个参数变成3D数组(X和Y都是2D,列表包裹后维度为(2,5,6)),但contourf要求前两个输入是独立的2D坐标网格,第三个是对应形状的2D数值数组。 - 坐标类型不匹配:
df.columns是字符串类型,直接用于meshgrid会导致Y轴坐标无法正确解析为数值,影响绘图逻辑。 - 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
相关产品推荐
相关产品推荐

