这个问题给出了y轴排序的方法:Data order in seaborn heatmap from pivot
但是如何对x轴和y轴执行自定义排序呢?
如果没有自定义排序,我们可以看到顺序:
X轴:电话、电视
Y轴:苹果、谷歌、三星
代码:

lol = [['apple', 'phone', 10], ['samsung', 'tv', 20], ['apple', 'tv', 5], ['google', 'tv', 8], ['google', 'phone', 9], ['samsung', 'phone', 3]]
df = pd.DataFrame(lol)
df = df.rename(columns={0:'brand', 1:'product', 2:'count'})
df = df.pivot('brand', 'product', 'count')
ax = sns.heatmap(df)
plt.show()

[出局]:
python - 如何在索引的DataFrame上对热图的x轴和y轴执行自定义排序?-LMLPHP
如果需要对Y轴进行排序以显示顺序samsung, apple, google,我可以这样做:
lol = [['apple', 'phone', 10], ['samsung', 'tv', 20], ['apple', 'tv', 5], ['google', 'tv', 8], ['google', 'phone', 9], ['samsung', 'phone', 3]]
df = pd.DataFrame(lol)
df = df.rename(columns={0:'brand', 1:'product', 2:'count'})
df = df.pivot('brand', 'product', 'count')

df.index = pd.CategoricalIndex(df.index, categories= ["samsung", "apple", "google"])
df.sortlevel(level=0, inplace=True)
ax = sns.heatmap(df)
plt.show()

[出局]:
python - 如何在索引的DataFrame上对热图的x轴和y轴执行自定义排序?-LMLPHP
但是如何对x轴和y轴执行自定义排序呢?,例如。
y轴显示顺序samsung, apple, google
X轴显示顺序tv, phone(不只是颠倒顺序)

最佳答案

我认为您可以使用reindex

a = ['samsung', 'apple', 'google']
b = ['tv','phone']

df = df.pivot('brand', 'product', 'count')
df = df.reindex(index=a, columns=b)
print (df)
product  tv  phone
brand
samsung  20      3
apple     5     10
google    8      9

ordered categorical
df['brand'] = df['brand'].astype('category', categories=a, ordered=True)
df['product'] = df['product'].astype('category', categories=b, ordered=True)

df = df.pivot('brand', 'product', 'count')
print (df)
product  tv  phone
brand
samsung  20      3
apple     5     10
google    8      9

ax = sns.heatmap(df)
plt.show()

关于python - 如何在索引的DataFrame上对热图的x轴和y轴执行自定义排序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46641618/

10-13 09:52