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

为何plt.pcolormesh支持二维输入却不支持一维?如何处理一维数组?

问题原因与解决方法

为什么第一段代码能运行,第二段不行?

plt.pcolormesh的核心是绘制单元格网格,输入的x、y需要和z的维度匹配:

  • 当z是(M, N)的二维数组时,x的长度可以是N或N+1,y的长度可以是M或M+1。
  • 第一段代码中z是(2,4),y长度为2(等于M=2),matplotlib可以自动推断出每一行的上下边界;但第二段代码中z是(1,4),y长度为1,此时无法推断出唯一一行的上下边界(需要两个值定义单元格的垂直范围),因此触发报错。

如何用pcolormesh处理一维数组?

针对一维数据(对应z为(1, N)的二维数组),有两种实用方案:

方案1:手动扩展y的边界

给y添加一个边界值,让其长度为2(即M+1),明确单元格的垂直范围:

import numpy as np
import matplotlib.pyplot as plt

y = [0.5, 1.5]  # 定义该行的上下边界
x = [0, 1, 2, 3]
z = [6, 2, 3, 5]
z = np.reshape(z, (1, 4))
plt.pcolormesh(x, y, z)
plt.show()

方案2:让matplotlib自动生成y坐标

如果不需要自定义垂直范围,可以省略y参数,让matplotlib自动生成默认的y边界:

import numpy as np
import matplotlib.pyplot as plt

x = [0, 1, 2, 3]
z = [6, 2, 3, 5]
z = np.reshape(z, (1, 4))
plt.pcolormesh(x, z)
plt.show()

直接处理一维z数组

如果不想将z reshape为二维,可通过np.newaxis快速转换为二维,同时提供y的边界:

import numpy as np
import matplotlib.pyplot as plt

y = [0, 1]
x = [0, 1, 2, 3]
z = [6, 2, 3, 5]
plt.pcolormesh(x, y, np.array(z)[np.newaxis, :])
plt.show()

内容的提问来源于stack exchange,提问作者Amit V

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 09:15:32