簡體   English   中英

使Matplotlib繪圖二進制圖從1開始

[英]Make Matplotlib plot binary map starting from 1

我有一個二維數組,並希望將其顯示為二進制熱圖。 我正在使用以下代碼片段:

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

但是,以這種方式,軸將為0到4。是否可以將其更改為1到5?

您可以這樣做:

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

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

有關seaborn.heatmap 文檔

您可以使用繪圖功能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

pcolormesh期望XY坐標作為網格傳遞。 假定您具有一維列出xy坐標的x和y,則可以調用X,Y = np.mesgrid(x, y)為您生成XY坐標網格。 這樣,您不必擔心坐標網格的實際語法,這很好。

在上面的plotBinary函數中, cen是框中心的列表。 這也是我們的xy坐標列表,因此所需的坐標網格是通過調用np.meshgrid(cen, cen)cen作為兩個args生成的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM