我一直在这里和网上搜索。我发现了某些我想要的问题/答案,但仍无法达到我想要的目标。
我有一个例如100个值的数组。值的范围为0到100。 我想将此数组绘制为网格,根据数组中的值填充正方形。
我到目前为止找到的解决方案如下:
Drawing grid pattern in matplotlib
和
custom matplotlib plot : chess board like table with colored cells
在我提到的例子中,颜色范围各不相同,并且不固定。
然而,我想知道的是,我是否可以设置特定值和颜色的范围。 例如, 如果值在10到20之间,则让网格方块的颜色为红色。 否则如果值在20到30之间,则让颜色为蓝色。等
如何在python中实现这一目标?
答案 0 :(得分:11)
您可以为自定义颜色创建ListedColormap,并为颜色BoundaryNorms设置颜色阈值。
import matplotlib.pyplot as plt
from matplotlib import colors
import numpy as np
data = np.random.rand(10, 10) * 20
# create discrete colormap
cmap = colors.ListedColormap(['red', 'blue'])
bounds = [0,10,20]
norm = colors.BoundaryNorm(bounds, cmap.N)
fig, ax = plt.subplots()
ax.imshow(data, cmap=cmap, norm=norm)
# draw gridlines
ax.grid(which='major', axis='both', linestyle='-', color='k', linewidth=2)
ax.set_xticks(np.arange(-.5, 10, 1));
ax.set_yticks(np.arange(-.5, 10, 1));
plt.show()
有关详情,请查看此matplotlib example。
答案 1 :(得分:0)
这取决于你需要的颜色单位,但只需要一个简单的if语句即可。
def find_colour(_val):
# Colour value constants
_colours = {"blue": [0.0, 0.0, 1.0],
"green": [0.0, 1.0, 0.00],
"yellow": [1.0, 1.0, 0.0],
"red": [1.0, 0.0, 0.0]}
# Map the value to a colour
_colour = [0, 0, 0]
if _val > 30:
_colour = _colours["red"]
elif _val > 20:
_colour = _colours["blue"]
elif _val > 10:
_colour = _colours["green"]
elif _val > 0:
_colour = _colours["yellow"]
return tuple(_colour)
只需将该元组转换为您需要的任何单位,例如RGBA(..)。然后,您可以实现您已经找到的方法来实现网格。