簡體   English   中英

在 matplotlib 顏色圖上設置特定的像素顏色,具體取決於值/數據類型(並保留范圍)

[英]Setting specific pixel colours on a matplotlib colourmap, depending on value/data type (and preserve range)

我有一個 CSV 數據文件,其中包含(簡化)形式的數據:

1.2, 2.2,   o,   s
1.7,   s, 2.4, 2.9
  o, 0.9, 0.1, NaN
1.4,   s, 0.5, 0.9

注意:這包含字符“o”,而不是數字零 (0)。 該文件與指示不同類型的“失敗”測量的字符混合在一起。 這些矩陣通常比 4x4 網格大得多。

I would like to plot these matrices on a colour map using matplotlib but where each failed measurement value is assigned its own colour on the plot, whilst preserving the colour range of legitimate data.

有邏輯的東西,例如`

if data == 'o':
   pixel_colour = 'red'

if data == 's':
   pixel_colour = 'black'

if data == 'NaN':
   pixel_colour = 'white'

` 我已經看過這篇有用的帖子( 更改 plt.imshow() 圖像的像素顏色。 ),但我想不出如何讓它處理異構數據類型。

要正確回答您的問題,您可以將錯誤值、norm、map 屏蔽為 RGBA,然后根據需要填寫其他 colors

import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np

data = np.array([[1.2, 2.2,   'o',   's', 2.5],
                 [1.7,   's', 2.4, 2.9, 1.7],
                 ['o', 0.9, 0.1, 'NaN', 0.4]])
data[data == 'NaN'] = -4000           
data[data == 'o'] = -5000           
data[data == 's'] = -6000
data = data.astype(np.float64)

norm = mpl.colors.Normalize(vmin=0, vmax=3)
cmap = plt.get_cmap('viridis')

# convert from 0-1:
datan = norm(data)
# convert to rgba:
rgba = cmap(datan)
# Fill in colours for the out of range data:
rgba[data==-4000, :] = [1, 1, 1, 1]
rgba[data==-5000, :] = [1, 0, 0, 1]
rgba[data==-6000, :] = [0, 1, 1, 1]

# plot:
fig, ax = plt.subplots()
ax.imshow(rgba)
plt.show()

在此處輸入圖像描述

暫無
暫無

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

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