Python 根据值/数据类型(和保留范围),在matplotlib颜色贴图上设置特定像素颜色

Python 根据值/数据类型(和保留范围),在matplotlib颜色贴图上设置特定像素颜色,python,matplotlib,colormap,Python,Matplotlib,Colormap,我有一个CSV数据文件,其中包含(简化)形式的数据: 注意:它包含字符“o”,而不是数字零(0)。此文件混合了表示不同类型的“失败”测量的字符。这些矩阵通常比4x4网格大得多 我想使用matplotlib在彩色地图上绘制这些矩阵,但每个失败的测量值都在绘图上指定了自己的颜色,同时保留合法数据的颜色范围 具有逻辑性的东西,例如。 ` ` 我已经看过这篇有用的文章(),但我想不出如何让它处理异构数据类型。要正确回答您的问题,您可以屏蔽错误值,norm,映射到RGBA,然后根据需要填充其他颜色 将ma

我有一个CSV数据文件,其中包含(简化)形式的数据:

注意:它包含字符“o”,而不是数字零(0)。此文件混合了表示不同类型的“失败”测量的字符。这些矩阵通常比4x4网格大得多

我想使用
matplotlib
在彩色地图上绘制这些矩阵,但每个失败的测量值都在绘图上指定了自己的颜色,同时保留合法数据的颜色范围

具有逻辑性的东西,例如。 `

`
我已经看过这篇有用的文章(),但我想不出如何让它处理异构数据类型。

要正确回答您的问题,您可以屏蔽错误值,norm,映射到RGBA,然后根据需要填充其他颜色

将matplotlib导入为mpl
将matplotlib.pyplot作为plt导入
将numpy作为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]]
数据[数据=='NaN']=-4000
数据[数据=='o']=-5000
数据[数据=='s']=-6000
data=data.astype(np.float64)
norm=mpl.colors.Normalize(vmin=0,vmax=3)
cmap=plt.get_cmap('viridis'))
#从0-1转换为:
数据n=标准(数据)
#转换为rgba:
rgba=cmap(数据网络)
#为超出范围的数据填写颜色:
rgba[数据==-4000,:]=[1,1,1,1]
rgba[数据==-5000,:]=[1,0,0,1]
rgba[数据==-6000,:]=[0,1,1,1]
#绘图:
图,ax=plt.子批次()
ax.imshow(rgba)
plt.show()

您只有o和s吗?还是有更多的类别?现在,只有“o”和“s”。NaN表示本例中缺少的数据,我应该指定。这不是对您问题的回答,但您可能只想在颜色贴图中使用“上方”和“下方”颜色:要回答您的问题,您可以始终将rgbA数组传递给imshow,它将只使用这些值。感谢您的分享!这是有道理的,但我认为问题在于分配大量的数字,比如说,“s”将偏离彩色地图的比例。此外,这仅适用于两种不同类型的“失败”测量。我们有3个,将来可能会更多。再次感谢!太好了,谢谢你!然而,我似乎不能得到一个颜色栏工作的一方的阴谋?获取错误:RuntimeError:找不到可用于创建颜色栏的映射。首先定义一个可映射的图像(带imshow)或轮廓se t(带contourf)。供将来参考:我最终通过遵循matplotlib colorbar文档修复了颜色栏问题:
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
if data == 'o':
   pixel_colour = 'red'

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

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