You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

解决matplotlib中pcolor绘制numpy数组出现镜像的问题

解决plt.pcolor显示数组镜像的问题

这个问题其实是因为plt.pcolor()默认的坐标轴方向和我们对数组行/列的直观认知不一致导致的:numpy数组的第一行对应图像的顶部,但pcolor默认把数组的第一行放在绘图区域的底部,所以就出现了镜像效果。

有几种简单的方法可以修正这个问题:

方法1:使用origin='upper'参数

这是最直接的解决方案,在调用pcolor的时候加上origin='upper'参数,告诉matplotlib把数组的第一行放在图像的顶部:

import numpy as np
import matplotlib.pyplot as plt

array = np.eye(5)
plt.pcolor(array, cmap="Greys", edgecolors="Grey", linewidths=1, origin='upper')
plt.show()

这样绘制出来的结果就和数组的实际顺序一致了,np.eye(5)的主对角线会从左上角延伸到右下角,完全符合我们的预期。

方法2:翻转数组本身

如果你不想修改绘图参数,也可以先对数组进行垂直翻转,用np.flipud()函数调整数组顺序来匹配pcolor默认的绘图方向:

import numpy as np
import matplotlib.pyplot as plt

array = np.eye(5)
array_flipped = np.flipud(array)
plt.pcolor(array_flipped, cmap="Greys", edgecolors="Grey", linewidths=1)
plt.show()

这个方法同样能得到正确的显示效果。

额外小提示

顺便提一句,plt.imshow()默认就是origin='upper'的配置,所以用imshow绘制数组时默认不会有镜像问题,但pcolor(以及pcolormesh)因为历史设计原因默认是origin='lower',这就是你遇到镜像问题的核心原因。

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

火山引擎 最新活动