python - 有什么方法可以将我的 seaborn 热图的颜色图值与其 y 轴值交换?
问题描述
我是热图和seaborn的新手。我已经尝试了好几天,但找不到解决方案或任何相关线程。我认为我设置的问题不正确,但想知道我正在尝试做的事情是否可以使用 seaborn 热图......或者热图是否不是我想要显示的正确图形表示。
我有一个 .csv 分数文件。它看起来像:
Genus,Pariaconus,Trioza,Non-members
-40,-80,-90,-300
-40.15,-80,-100,-320
,-40.17,-86,-101,-470
,-86.2,-130,-488
,,-132,-489
,,,-500
...
正如我在上面尝试显示的那样,列的长度不同。假设 Genus 的长度(值的数量)是 10,Pariaconus 是 15,Trioza 是 20,Non-members 是 18,000。
此外,列和行彼此不相关。每个分数都是单独的,并且仅属于列组。我想用热图显示的是每列中出现的分数范围。
理想情况下,我希望使用热图来表示数据,其中:
- X 轴是“Genus”、“Pariaconus”、“Trioza”、“Non-members”。
- Y 轴是数据集中出现的分数范围。在上面的示例中,Y 轴值将从 -40 变为 -500。
- 颜色条是 在 Y 轴上获得该分数的列的归一化总体。例如,如果 Genus 列的 100% 得分约为 -40,则 Y 轴上的该区域将被涂成红色(对于 1.0)。Genus 的 y 轴的其余部分将被涂成蓝色(0.0),因为 Genus 的分数不在 -50 到 -500 的范围内。出于我项目的目的,我想表明“属”的大多数分数都在某个范围内,“Pariaconus”在另一个范围内,“非成员”在另一个范围内,等等。
我想用热图而不是折线图来表示这一点的原因是因为折线图表明同一列中的行之间存在趋势。在上面的示例(属列)中,当您向下移动 X 轴时,线/散点图会让人觉得分数 -40、-41 和 -45 之间存在关系。相反,我只想显示每列中的分数范围。
使用上面 .csv 格式的数据,现在我有以下热图:https ://imgur.com/a/VwgQwfQ
我通过代码行得到了这个:
sns.heatmap(df, cmap="coolwarm")
在此热图中,Y 轴的值自动设置为 .csv 文件中的行索引,颜色图值是分数(行的值)。
如果我能弄清楚如何交换颜色图和 Y 轴,那么我希望我可以继续研究如何规范化每列的总体,而不是将其作为原始索引:0 到 18000。但是我这几天一直在尝试这样做,但还没有接近我想要的。
理想情况下,我想要这样的东西:https ://imgur.com/a/3A0eaOD 。当然,在热图中,会有渐变而不是纯色。
如果有人可以回答,我有这些问题:
- 我正在尝试做的事情是否可以实现/这是我可以用热图做的事情吗?还是我应该使用不同的表示?
- 这可能与我的输入数据的表示方式有关吗?如果是这样,在构建这样的热图时正确的表示是什么?
任何其他指导将不胜感激。
解决方案
推荐阅读
- actions-on-google - 如何使用操作 sdk 在 webhook 中添加建议芯片
- python - sklearn.model_selection.train_test_split 随机状态
- php - 为什么函数参数不适用于类
- java - 完整的链表不会打印所有值
- ansible - Anisble Nmap 库存插件
- c# - 为什么不能通过继承 C# 中的类型来达到在接口中声明的嵌套类型?
- android - 如何绕过 Flutter InAppWebView 中的无效 SSL 证书
- pandas - Pandas Dataframe - 按列值分组并从其他列中查找值
- nativescript - 将填充的couchbase lite db保存为nativescript和vue中的备份?
- python - 在 Excel 的不同工作表中插入数据