web-dev-qa-db-ja.com

ピボットからのシーボーンヒートマップのデータ順序

シーボーンを使用して作成したヒートマップがあります

revels = rd.pivot("Flavour", "Packet number", "Contents")

ax = sns.heatmap(revels, annot=True, fmt="d", linewidths=0.4, cmap="YlOrRd")

plt.show()

生成する enter image description here

ただし、私がやりたいことが2つあります。seabornのヘルプファイル( http://seaborn.pydata.org/generated/seaborn。 heatmap.html

私がやりたいことは、フレーバーを違う順序で注文することです。オレンジ、タフィー、チョコ、モルト、レーズン、コーヒーとしてテキストファイルに入力された順序にもかかわらず、プロット時にこの方法は生成されません。 yticklabsを編集しようとしましたが、データを移動するのではなく、ラベルを編集するだけです。

助けてくれてありがとう

PSデータは次のようになります。

Packet number,Flavour,Contents
1,orange,4
2,orange,3
3,orange,2
...
1,toffee,4
2,toffee,3
3,toffee,3
...
etc.
8
mystifier

最初の質問については、データでソートを実行する必要があります。最初の行でデータフレームが作成され、sortlevelメソッドを使用してソートできます。

データフレームを作成します。

revels = rd.pivot("Flavour", "Packet number", "Contents")

インデックスとしてフレーバーを使用しているため、ヒートマップに追加する前にsortlevelメソッドを使用します。

revels.sortlevel(level=0, ascending=True, inplace=True)

これにより、ヒートマップでのデータの順序が変更されます。

これは明らかに昇順/降順の並べ替えを提供しますが、カスタムの並べ替え順序が必要な場合は、このリンクを試してください: カスタムの並べ替えpandas dataframe

カスタムソートの例

revels.index = pd.CategoricalIndex(revels.index, categories= ["orange", "toffee", "chocolate", "malteser", "raisin", "coffee"])
revels.sortlevel(level=0, inplace=True)
4
Andrew L

上記の例は機能しますが、sortlevelを_sort_index_に置き換える必要があります

つまり、revels.sortlevel(level=0, ascending=True, inplace=True)revels.sort_index(axis=0, ascending=True, inplace=True)になります。

1
bracoo