我目前正处于从R
和ggplot2
迁移到seaborn
的过程中,因为R正在为我使用的数据量而苦苦挣扎。我目前正在开发一个相当简单的热图,我已经能够在没有太多问题的情况下渲染一般的热图,但我不确定如何调整热图的分类顺序。
在本例中,我的数据具有以下标头:
Sample Position Depth Order
样本是“y轴”范畴,位置是“x轴”范畴。深度是单元格的值。Order是在其他地方计算的元值,但我想使用Order作为y轴的排序值,同时保留Sample作为标签。有没有办法做到这一点?
发布于 2020-06-07 19:40:00
您需要为sns.heatmap提供一个矩形格式或矩阵,因此尽管您有一个用于对Sample
进行排序的Order
列,但是不清楚每个'Order'
类别是否有一个惟一的值。
下面我使用一个简单的例子,基本上你根据“Order”的平均值将“Sample”更改为一个类别。这就像更改R中的因子级别一样。此外,您还需要确保没有NaN,否则热图可能会报告:
df = pd.DataFrame({'Sample':np.repeat(['A','B','C'],4),
'Position':[1,2,3,4]*3,
'Depth':np.random.normal(0,1,12),
'Order':np.repeat([2,1,3],4)})
y_order = df.groupby('Sample')['Order'].agg('mean').sort_values().index
df['Sample'] = pd.Categorical(df['Sample'],ordered=True,categories=y_order)
sns.heatmap(df.pivot(index='Sample',columns='Position', values='Depth'))
https://stackoverflow.com/questions/62240455
复制相似问题