web-dev-qa-db-ja.com

Python-値に基​​づいて色付きのグリッドをプロット

こことネットで検索しています。私は何とかして欲しいものに近い質問/回答を見つけましたが、それでも探しているものに到達できませんでした。

たとえば、100個の値の配列があります。値の範囲は0〜100です。この配列をグリッドとしてプロットし、配列内の値に従って正方形を塗りつぶします。

私がこれまでに見つけた解決策は次のようなものです。

matplotlibでのグリッドパターンの描画

そして

カスタムmatplotlibプロット:色付きセルのあるテーブルのようなチェス盤

前述の例では、色の範囲はさまざまであり、固定されていません。

しかし、私が疑問に思っているのは、特定の値と色の範囲を設定できるかどうかです。たとえば、値が10〜20の場合、グリッドの正方形の色を赤にします。それ以外の場合、値が20〜30の場合、色を青にします。等.

Pythonでこれをどのように達成できますか?

12
philippos

カスタムの色と色に対して 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の例

15
umutto

それはあなたの色が必要なユニットに依存しますが、単純な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)

そして、そのTupleを必要な単位に変換するだけです。 RGBA(..)。その後、グリッドを達成するためにすでに見つけたように見えるメソッドを実装できます。

0
Jordan Gleeson