我有一个二维数组,并希望将其显示为二进制热图。我正在使用以下代码段:
m = np.random.randint(1, 5, (5,5))
plt.imshow(m, cmap='binary')
但是,以这种方式,轴将为0到4。是否可以将其更改为1到5?
答案 0 :(得分:0)
您可以这样做:
print(("{:#x} "*len(radio_init_buf)).format(*radio_init_buf))
Documentation关于plt.xticks(range(m.shape[1]), range(1, m.shape[1] + 1))
plt.yticks(range(m.shape[0]), range(1, m.shape[0] + 1))
。
编辑
对于plt.xticks
:
seaborn
Documentation关于sns.heatmap(m, cmap='binary', xticklabels=range(1, m.shape[1] + 1), yticklabels=range(1, m.shape[0] + 1))
。
答案 1 :(得分:0)
您可以使用绘图功能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
期望X
和Y
坐标作为网格传递。假设您有x和y坐标的一维列表x
和y
,则可以调用X,Y
= np.mesgrid(x, y)
来生成X
和Y
坐标网格您。这样,您不必担心坐标网格的实际语法,这很好。
在上面的plotBinary
函数中,cen
是盒子中心的列表。这也是我们的x
和y
坐标列表,因此所需的坐标网格是通过将np.meshgrid(cen, cen)
作为两个参数调用cen
来生成的。