簡體   English   中英

如何在不使用“ set_bad”的情況下在matplotlib.pyplot中顯示具有特定顏色的矩陣

[英]How to display a matrix with specific colours in matplotlib.pyplot without using “set_bad”

我想創建一個矩陣的多個圖像。 我已經修改了matplotlib中“ 繪圖”網格模式處的代碼,該代碼使用cmap屬性“ set_bad”將Nan值設置為透明白色。

有沒有一種方法可以避免設置“ set_bad”,“ set_upper”和“ set_lower”,以及告訴顏色映射表矩陣值確切顯示什么顏色?

如果我的矩陣是2x2並填充有零,我想要一個全黑的圖像: 在此處輸入圖片說明

如果我的矩陣是2x2填充的矩陣,我想要這樣的全白圖像: 在此處輸入圖片說明 這就是問題。 當矩陣值均為1.0時,圖像將完全變黑。 (我猜是因為所有值都與cmap渲染的第一個值(黑色)相同嗎?)。

如果我的矩陣是2x2,對角線上有1,我想要這張圖片: 在此處輸入圖片說明

import matplotlib
import matplotlib.pyplot as plt
from matplotlib import colors
import numpy as np


N = 2

# make an empty data set
data = np.zeros((N, N))


for i in range(N):
    for j in range(N):
        # when all elements are 0 I want it to be black. 
        # Currently works how I want it to
        #data[i,j] = 0

        # When all elements are 1 I want it to be white but it is all black.
        # This isn't working like I want it to.
        data[i,j] = 1

        # here I want to have white squares in the top left and bottom right. 
        # Currently works how I want it to
        #data[0,0] = 1
        #data[1,1] = 1

print(data)
# make a figure + axes
fig, ax = plt.subplots(1, 1, tight_layout=True)
# make color map
my_cmap = matplotlib.colors.ListedColormap(['black', 'white'])

# draw the grid
for x in range(N + 1):
    ax.axhline(x, lw=2, color='k', zorder=5)
    ax.axvline(x, lw=2, color='k', zorder=5)
# draw the boxes
ax.imshow(data, interpolation='none', cmap=my_cmap, extent=[0, N, 0, N], zorder=0)
# turn off the axis labels
ax.axis('off')
plt.show()

您需要確保剛剛創建的色彩圖正確縮放。 為此,只需在繪圖指令中添加參數“ vmin”和“ vmax”即可。 像這樣:

ax.imshow(data, interpolation='none', cmap=my_cmap, extent=[0, N, 0, N], zorder=0, vmin=0, vmax=1)

這將解決問題:

在此處輸入圖片說明

imshow在映射到顏色之前縮放數據。 可以使用norm參數控制歸一化。 文檔中

默認情況下,使用線性比例將最小值映射到0,將最大值映射到1。

因此,您必須傳遞一個自定義的Normalize實例。

在您的代碼中,您必須執行以下操作:

ax.imshow(data, interpolation='none', cmap=my_cmap, extent=[0, N, 0, N], zorder=0, norm=Normalize(0,1))

明確地映射到[0,1]間隔。

使用Normalize(0,1)結果

暫無
暫無

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

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