亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在matplotlib中使用imshow將NaN值繪制為特殊顏色?

如何在matplotlib中使用imshow將NaN值繪制為特殊顏色?

幕布斯6054654 2019-12-25 14:34:56
我正在嘗試在matplotlib中使用imshow將數據繪制為熱圖,但其中一些值為NaN。我希望將NaN渲染為在顏色圖中找不到的特殊顏色。例:import numpy as npimport matplotlib.pyplot as pltf = plt.figure()ax = f.add_subplot(111)a = np.arange(25).reshape((5,5)).astype(float)a[3,:] = np.nanax.imshow(a, interpolation='nearest')f.canvas.draw()生成的圖像出乎意料地是全藍色(噴射彩色圖中的最低顏色)。但是,如果我這樣作圖:ax.imshow(a, interpolation='nearest', vmin=0, vmax=24)-然后我得到了更好的結果,但是NaN值的繪制顏色與vmin相同...是否可以通過一種優美的方式將NaN設置為使用特殊顏色繪制(例如:灰色或透明)?
查看完整描述

3 回答

?
滄海一幻覺

TA貢獻1824條經驗 獲得超5個贊

對于較新版本的Matplotlib,不再需要使用掩碼數組。


例如,讓我們生成一個數組,其中每個第7個值都是NaN:


arr = np.arange(100, dtype=float).reshape(10, 10)

arr[~(arr % 7).astype(bool)] = np.nan

我們可以修改當前的顏色圖,并使用以下幾行來繪制數組:


current_cmap = matplotlib.cm.get_cmap()

current_cmap.set_bad(color='red')

plt.imshow(arr)


查看完整回答
反對 回復 2019-12-25
?
慕的地6264312

TA貢獻1817條經驗 獲得超6個贊

嗯,看來我可以使用蒙版數組來做到這一點:


masked_array = np.ma.array (a, mask=np.isnan(a))

cmap = matplotlib.cm.jet

cmap.set_bad('white',1.)

ax.imshow(masked_array, interpolation='nearest', cmap=cmap)

這應該足夠了,盡管我仍然愿意提出建議。:]


查看完整回答
反對 回復 2019-12-25
?
胡說叔叔

TA貢獻1804條經驗 獲得超8個贊

附帶一點-我認為這樣做會覆蓋默認值matplotlib.cm.jet,因此我通常會制作一個副本:import copy; cmap=copy.copy(matplotlib.cm.jet)。另外,如果要將0值設置為其他顏色,cmap._init(); cm._lut[:,0] = (1,1,1,1)則應使用類似的方法。

查看完整回答
反對 回復 2019-12-25
  • 3 回答
  • 0 關注
  • 1396 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號