首页 > 解决方案 > 从 1 开始制作 Matplotlib 绘图二进制图

问题描述

我有一个二维数组,想将其显示为二进制热图。我正在使用以下代码片段:

m = np.random.randint(1, 5, (5,5))
plt.imshow(m, cmap='binary')

但是,这样一来,轴就会是0到4。有没有办法把它改成1到5呢?

标签: pythonnumpymatplotlib

解决方案


您可以使用绘图功能pcolormesh,它允许您指定数据的坐标,而不是imshow。这里有些例子:

在此处输入图像描述

在此处输入图像描述

这是用于生成上述图像的完整代码:

import matplotlib.pyplot as plt
import numpy as np

def plotBinary(mmin=1, mmax=5):
    x = np.arange(mmin-1, mmax+2)
    cen = (x[:-1] + x[1:])/2
    X,Y = np.meshgrid(cen, cen)

    m = np.random.randint(mmin, mmax+1, X.shape)
    plt.pcolormesh(X, Y, m, cmap='binary')

plotBinary()
plt.show()
plotBinary(3, 10)
plt.show()

坐标的解释pcolormesh

pcolormesh期望XY坐标作为网格传递。鉴于您有 1D 列表x以及yx 和 y 坐标,您可以调用X,Y = np.mesgrid(x, y)为您生成 theXY坐标网格。这样您就不必担心坐标网格的实际语法,这很好。

在上面的plotBinary函数中,cen是一个盒子中心的列表。这也是我们的坐标xy坐标列表,所以需要的坐标网格是通过调用np.meshgrid(cen, cen)with cenas both args 生成的。


推荐阅读