Python 在Matplotlib imshow中设置特定值的颜色

Python 在Matplotlib imshow中设置特定值的颜色,python,python-3.x,matplotlib,Python,Python 3.x,Matplotlib,假设我正在使用imshow在一个简单的matplotlib热图上绘制以下numpy数据数组;在某些情况下,该值将为0.0。有没有办法为显示该值的单元格设置指定颜色?例如,当值为0时,该单元格的颜色必须为黑色 a = np.array([[0.8, 2.4, 2.5, 3.9, 0.0, 4.0, 0.0], [2.4, 0.0, 4.0, 1.0, 2.7, 0.0, 0.0], [1.1, 2.4, 0.8, 4.3, 1.9, 4.4,

假设我正在使用
imshow
在一个简单的matplotlib热图上绘制以下numpy数据数组;在某些情况下,该值将为
0.0
。有没有办法为显示该值的单元格设置指定颜色?例如,当值为0时,该单元格的颜色必须为黑色

a = np.array([[0.8, 2.4, 2.5, 3.9, 0.0, 4.0, 0.0],
              [2.4, 0.0, 4.0, 1.0, 2.7, 0.0, 0.0],
              [1.1, 2.4, 0.8, 4.3, 1.9, 4.4, 0.0],
              [0.6, 0.0, 0.3, 0.0, 0, 0.0, 0.0],
              [0.7, 1.7, 0.6, 2.6, 2.2, 6.2, 0.0],
              [0, 1.2, 0.0, 0.0, 0.0, 3.2, 5.1],
              [0.1, 2.0, 0.0, 1.4, 0.0, 1.9, 6.3]])   

Map = ax.imshow(a, interpolation='none', cmap='coolwarm')

也许不是完美的解决方案,但绝对是一个简单的解决方案。如果只是为了创建图像,您可以修改原始数据(或其副本),并将
0.0
替换为
NaN
。然后您可以使用
set_bad
获得所需的输出

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

a = np.array([[0.8, 2.4, -2.5, 3.9, 0.0, 4.0, 0.0],
              [2.4, 0.0, 4.0, 1.0, 2.7, 0.0, 0.0],
              [-1.1, 2.4, 0.8, 4.3, 1.9, 4.4, 0.0],
              [0.6, 0.0, 0.3, 0.0, 0, 0.0, 0.0],
              [0.7, 1.7, -0.6, 2.6, 2.2, 6.2, 0.0],
              [0, 1.2, 0.0, 0.0, 0.0, 3.2, 5.1],
              [0.1, 2.0, 0.0, 1.4, 0.0, 1.9, 6.3]])   

c_map = cm.get_cmap('rainbow')
c_map.set_bad('k')
b = a.copy()
b[b==0] = np.nan
fig = plt.imshow(b, interpolation='none', cmap=c_map)
plt.colorbar(fig)

也许不是完美的解决方案,但绝对是一个简单的解决方案。如果只是为了创建图像,您可以修改原始数据(或其副本),并将
0.0
替换为
NaN
。然后您可以使用
set_bad
获得所需的输出

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

a = np.array([[0.8, 2.4, -2.5, 3.9, 0.0, 4.0, 0.0],
              [2.4, 0.0, 4.0, 1.0, 2.7, 0.0, 0.0],
              [-1.1, 2.4, 0.8, 4.3, 1.9, 4.4, 0.0],
              [0.6, 0.0, 0.3, 0.0, 0, 0.0, 0.0],
              [0.7, 1.7, -0.6, 2.6, 2.2, 6.2, 0.0],
              [0, 1.2, 0.0, 0.0, 0.0, 3.2, 5.1],
              [0.1, 2.0, 0.0, 1.4, 0.0, 1.9, 6.3]])   

c_map = cm.get_cmap('rainbow')
c_map.set_bad('k')
b = a.copy()
b[b==0] = np.nan
fig = plt.imshow(b, interpolation='none', cmap=c_map)
plt.colorbar(fig)

您是否有特定的数据精度,例如小数点后2位?不,只有当值精确时,它才需要为黑色(或任何其他颜色)zero@JayK23你能应用一个低值(即0.0)为黑色的cmap吗?@JayK23,是否总是只有值>=0?不总是;是的,我可以应用一个低值为黑色的颜色贴图,但我担心它会打乱热图的整体样式。您是否有特定的数据准确性,例如小数点后2位?不,只有当值精确时,它才需要为黑色(或任何其他颜色)zero@JayK23您是否可以应用一个低值为黑色的cmap(即0.0)?@JayK23,是否总是只有值>=0?不总是;是的,我可以应用一个低值的颜色贴图,但我担心它会打乱热图的整体样式。这绝对是一个好方法。谢谢!最后一个问题:颜色需要是黑色还是可以自定义并设置,例如,设置为#ff3d3d你可以像这样设置任何你需要的颜色:c#map.set#u bad(#ff3d3d“)这绝对是一个好方法。谢谢!最后一个问题:颜色需要黑色还是可以自定义并设置,例如,设置为#ff3d3d?你应该可以像这样设置任何你需要的颜色:c#map.set#u bad(#ff3d3d“)