为何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
相关产品推荐
相关产品推荐

