我想用seaborn制作一個熱圖。我有一個1920x1080的二維陣列,其中包含影像中每個像素的顯著性值,從0-1(0=最低的顯著性-藍色,1=最高的顯著性-紅色)。我把我的影像分成了80x90像素的小網格。我得到的影像如下:
到目前為止還不錯。
然而,使用此代碼:
import numpy as np
plt.figure(figsize= (16,9)
xticklabels=range(0,1920, 80)
yticklabels=range(0,1080, 90)
xticks[80,160,240, 320,400,480。 560,640,720。 800,880,960。 1040,1120,1200。 1280,1360, 1440, 1520,1600, 1680, 1760,1840,1920]
yticks=[90,180,270。 360,450,540。 630,720, 810, 900,990, 1080]
normalized_saliency_map=np.random.random((1080,1920)
ax=sns.heatmap(normalized_saliency_map,
cmap='jet'。
linewidth=0.5。
xticklabels = xticklabels。
yticklabels = yticklabels)
ax.set_xticks(xticks)
ax.set_yticks(yticks)
plt.title(f'Image: {i}')
plt.show()
我得到的是這樣的空圖:
如果我注釋掉ax.set_xticks(xticks)和ax.set_yticks(yticks),我將得到這樣的結果:
我在這里錯過了什么呢?
uj5u.com熱心網友回復:
主陣列
。- 移除
linewidth。
- 添加
set_xticklabels和set_yticklabels。
# test data。
np.random.seed(365)
data = np.random.random((1080,1920)
ax = sns.heatmap(data, cmap='jet')
ax.set_xticks(xticks) # 這只是刻度線的位置,不是標簽。
ax.set_xticklabels(xticks) # 這是在設定了ticks后添加了標簽。
ax.set_yticks(yticks)
ax.set_yticklabels(yticks)
ax.invert_yaxis() # 如果需要的話,可以用來調換y軸值的方向。
ax.grid(color='k')
plt.show()
拆分陣列
的函式。
blockshaped
。
- 這是另一個答案中的函式,用于重塑陣列 。
def blockshaped(arr, nrows, ncols)。
""
回傳一個形狀為(n, nrows, ncols)的陣列,其中
n * nrows * ncols = arr.size
如果arr是一個二維陣列,回傳的陣列應該看起來像n個子塊,每一個子塊都保留了 "物理的"。
每個子塊保留了arr的 "物理 "布局。
""
h, w = arr.shape
assert h % nrows == 0, f"{h} 行不能被{nrows}均勻分割" 。
assert w % ncols == 0, f"{w} cols is not evenly divided by {ncols}"/span>
return (arr.reshape(h//nrows, nrows, -1, ncols)
.swapaxes(1,2)
.reshape(-1, nrows, ncols))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/332628.html
標籤:
上一篇:你怎么稱呼這種型別的通知(?),它在Flutter中是否可用?
下一篇:驅動API更新。



