離散値を持つカーペットプロットを作成したいと思います。たとえば、次の値があります。
import pandas as pd
import pylab as plt
df_data = pd.DataFrame(
[[1, 2, 1], [1, 1, 3], [2, 2, 5], [3, 2, 1]], index=['n1', 'n2', 'n3', 'n4'], columns=['var1', 'var2', 'var3'])
これらの離散値を色に一致させるための辞書もあります。
matcher_dict = {
1: (236, 99, 92), 2: (75, 129, 196), 3: (244, 153, 97), 5: (135, 104, 180)}
私は今カーペットプロットを作成したいと思います.imshowのドキュメントが言うように、imshowはこれを解決する方法になると思いました.
cmap : カラーマップ、オプション、デフォルト: なし
None の場合、デフォルトで rc image.cmap 値になります。X に RGB(A) 情報がある場合、cmap は無視されます
そこで、色をエントリとして新しいデータフレームを作成します。
df_color = pd.DataFrame(index=df_data.index, columns=df_data.columns)
for col_index, col in enumerate(df_data.iteritems()):
for row_index, value in enumerate(col[1]):
df_color.ix[row_index].ix[col_index] = matcher_dict[
df_data.ix[row_index].ix[col_index]]
これでうまくいくと思います:
fig,ax = plt.subplots()
im = ax.imshow(
df_color.values, interpolation='nearest', aspect='auto')
しかし、私が得るのは TypeError: Image data can't convert to float だけです
私が期待した結果 (そしてひどく非効率なコードで作成できたもの) は、このカーペットプロットの期待される結果のようになるはずです
しかし、これは TypeError を発生させるだけで、Image データは float に変換できません。
編集: df_data.values を直接使用する場合 (df_color.values の代わりに、デフォルトのカラーマップを使用してプロットを作成します。個別のカラーマップを作成することは可能ですか? (matplotlibs のドキュメントを読んでカラーマップの概念を完全に理解していませんでした) )