13

次のような棒グラフがあります。http://matplotlib.org/examples/api/barchart_demo.html

その場合、グループ G1 ~ G5 のそれぞれが、各グループの男性が何らかの試験で取得し、各グループの女性が同じ試験で取得した平均スコアを表すと仮定します。

ここで、各グループに関連付けられた他の機能があるとしましょう (平均好感度 (1 ~ 5 の浮動小数点数))。

Ex: Avg Likability of men in G1 - 1.33
                   Avg Likability of women in G1 - 4.6
                   Avg Likability of men in G2- 5.0
                   .... etc...

1 - あまり好まれない、5 - とても好感が持てると仮定しましょう

色の例の陰影を変更することで、この好感度の特徴を各バーに組み込む方法を知りたいです。上記の例のグループ 1 の男性は 1.33 であるため、グループ 1 の男性のグラフは、グループ 1 の男性よりも明るい色合いの赤でシェーディングされます。 G2 の場合、G2 の男性の好感度は 5.0 であるため、彼らのバーはグラフで最も暗い赤の色合いになり、女性の場合も同じです。

私は自分自身を明確にしたことを願っています。私はこのパッケージに非常に慣れていないので、誰かがこれを達成できるmatplotlibのリソースを教えてくれたら本当にありがたいです。

前もって感謝します。

4

3 に答える 3

12

bar色のリストを引数として取ります(docs)。必要な色を渡すだけです。

import matplotlib.pyplot as plt
import matplotlib.cm as cm
from matplotlib.colors import Normalize
from numpy.random import rand

fig, ax = plt.subplots(1, 1)
# get a color map
my_cmap = cm.get_cmap('jet')
# get normalize function (takes data in range [vmin, vmax] -> [0, 1])
my_norm = Normalize(vmin=0, vmax=5)
# some boring fake data
my_data = 5*rand(5)
ax.bar(range(5), rand(5), color=my_cmap(my_norm(my_data)))

plt.show()

ここに画像の説明を入力

于 2013-09-19T20:07:18.710 に答える
3
import matplotlib.pyplot as plt
import matplotlib as mp
import numpy as np


xs = "ABCDEFGHI"
ys = [5, 6, 7, 8, 9, 10, 11, 12, 13]


#Colorize the graph based on likeability:

likeability_scores = np.array([
    5, 4.5, 3.5,
    2.5, 1.5, .5,
    2, 3, 4,
])

data_normalizer = mp.colors.Normalize()
color_map = mp.colors.LinearSegmentedColormap(
    "my_map",
    { 
        "red": [(0, 1.0, 1.0),
                (1.0, .5, .5)],

        "green": [(0, 0, 0),
                  (1.0, 0, 0)],

        "blue": [(0, 0, 0),
                 (1.0, 0, 0)]
    }

)

#Map xs to numbers:
N = len(xs)
x_nums = np.arange(1, N+1)

#Plot a bar graph:
plt.bar(
    x_nums,
    ys,
    align="center",
    color=color_map(data_normalizer(likeability_scores))
)

#Change x numbers back to strings:
plt.xticks(x_nums, xs)

plt.show()

--output:--

ここに画像の説明を入力

r、g、b の値は 0 ~ 1 です。赤のマッピングは次のとおりです。

       "red": [(0, 1.0, 1.0),
               (1.0, .5, .5)],

各タプルの最初の要素は、正規化された好感度スコアを指定します。各タプルの 2 番目の要素は、赤の色合い (0-1) を指定します。各タプルの 3 番目の要素はより複雑なもののためのものなので、ここでは常に 2 番目の要素と同じです。

赤のマッピングは、0 ~ 1.0 の正規化された好感度スコア (各タプルの最初の要素) が 100% 赤から 50% 赤 (各タプルの 2 番目の要素) の範囲にマップされることを指定します。正規化された好感度スコア 0 は 100% の赤にマッピングされ、正規化された好感度スコア 1.0 は 50% の赤にマッピングされます。最も暗い赤を 50% に設定すると、赤が暗すぎて茶色や黒に見えなくなります。

必要な数のタプルを指定できます。正規化された好感度スコアの範囲全体 (0 ~ 1) に必ず赤の値を割り当てる必要があります。次に例を示します。

       "red": [(0, .5, .5),
               (.8, .6, .6),
               (1.0, .9, .9)],

あなたはこれを行うことはできません:

       "red": [(0, .5, .5),
               (.8, 1.0, 1.0)],
于 2013-09-24T20:29:57.190 に答える