0

離散値を持つカーペットプロットを作成したいと思います。たとえば、次の値があります。

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 のドキュメントを読んでカラーマップの概念を完全に理解していませんでした) )

4

1 に答える 1