使Matplotlib从1开始绘制二进制映射

2024-04-26 23:35:40 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

但是,这样,轴将为0到4。有没有办法把它改成1到5?你知道吗


Tags: 代码段np二进制pltrandom数组cmap热图
2条回答

你可以这样做:

plt.xticks(range(m.shape[1]), range(1, m.shape[1] + 1))
plt.yticks(range(m.shape[0]), range(1, m.shape[0] + 1))

Documentation关于plt.xticks。你知道吗

编辑

seaborn的情况下:

sns.heatmap(m, cmap='binary', xticklabels=range(1, m.shape[1] + 1), yticklabels=range(1, m.shape[0] + 1))

Documentation关于seaborn.heatmap。你知道吗

您可以使用绘图函数^{},它允许您指定数据的坐标,而不是imshow。以下是一些示例:

enter image description here

enter image description here

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

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坐标作为网格传递。假设您有x和y坐标的1D列表xy,您可以调用X,Y = np.mesgrid(x, y)为您生成XY坐标网格。这样您就不必担心坐标网格的实际语法,这很好。你知道吗

在上面的plotBinary函数中,cen是框中心的列表。这也是我们的xy坐标列表,因此通过调用np.meshgrid(cen, cen)cen作为两个参数来生成所需的坐标网格。你知道吗

相关问题 更多 >