我有一个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网格大得多。
我想使用matplotlib将这些矩阵绘制在颜色图上,但每个失败的测量值都会在图上分配其自己的颜色,同时保留合法数据的颜色范围。
具有逻辑的东西,例如`
if data == 'o':
pixel_colour = 'red'
if data == 's':
pixel_colour = 'black'
if data == 'NaN':
pixel_colour = 'white'“我已经看过这个有用的帖子(Changing colours of pixels of plt.imshow() image.)了,但我想不出如何让它来处理异构数据类型。”
发布于 2021-05-26 01:33:52
要正确回答您的问题,您可以屏蔽不正确的值、规范、映射到RGBA,然后根据需要填充其他颜色
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()

https://stackoverflow.com/questions/67690106
复制相似问题