Python - 根据值绘制彩色网格

时间:2017-05-15 03:19:42

标签: python matplotlib plot colors grid

我一直在这里和网上搜索。我发现了某些我想要的问题/答案,但仍无法达到我想要的目标。

我有一个例如10​​0个值的数组。值的范围为0到100。 我想将此数组绘制为网格,根据数组中的值填充正方形。

我到目前为止找到的解决方案如下:

Drawing grid pattern in matplotlib

custom matplotlib plot : chess board like table with colored cells

在我提到的例子中,颜色范围各不相同,并且不固定。

然而,我想知道的是,我是否可以设置特定值和颜色的范围。 例如, 如果值在10到20之间,则让网格方块的颜色为红色。 否则如果值在20到30之间,则让颜色为蓝色。等

如何在python中实现这一目标?

2 个答案:

答案 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()

导致; Plot with BoundaryNorms

有关详情,请查看此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(..)。然后,您可以实现您已经找到的方法来实现网格。