web-dev-qa-db-ja.com

matplotlibで数値をカラースケールに変換するにはどうすればよいですか?

バープロットを作成していますが、色のグラデーションに従ってバーの色を赤から青に変えたいと思います。赤と青のスケールで各バーがどこにあるべきかを示すデータフレームのディメンションがあります。私の現在の方法は、RGB赤と青の間を線形補間することにより、これらの値を手動でRGBカラーに変換することですが、数値をカラースケールに自動変換する方法が必要です。また、解釈を支援するために、カラーバーの凡例を持っている必要があります。

13
Aaron

バーチャートを作成し、データフレームの値に従ってバーの色を設定するのは非常に簡単です。カラーマップと正規化インスタンスは、値を色に変換するのに役立ちます。色は、matplotlib.Axes.barcolor引数によって理解されます。次に、バーと同じ正規化とカラーマップを使用して、ScalarMappableからカラーバーが作成されます。

enter image description here

import matplotlib.pyplot as plt
import matplotlib.colors
import numpy as np; np.random.seed(0)
import pandas as pd

x = np.arange(12)
y = np.random.Rand(len(x))*51
c = np.random.Rand(len(x))*3+1.5
df = pd.DataFrame({"x":x,"y":y,"c":c})

cmap = plt.cm.Rainbow
norm = matplotlib.colors.Normalize(vmin=1.5, vmax=4.5)

fig, ax = plt.subplots()
ax.bar(df.x, df.y, color=cmap(norm(df.c.values)))
ax.set_xticks(df.x)

sm = plt.cm.ScalarMappable(cmap=cmap, norm=norm)
sm.set_array([])  # only needed for matplotlib < 3.1
fig.colorbar(sm)

plt.show()

バープロットでカスタムカラーマップを使用するには、 カラーマップに従って色付けされたバープロット? を参照してください。