首页 > 解决方案 > 有什么方法可以将我的 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 轴时,线/散点图会让人觉得分数 -40、-41 和 -45 之间存在关系。相反,我只想显示每列中的分数范围。

使用上面 .csv 格式的数据,现在我有以下热图:https ://imgur.com/a/VwgQwfQ

我通过代码行得到了这个:

sns.heatmap(df, cmap="coolwarm")

在此热图中,Y 轴的值自动设置为 .csv 文件中的行索引,颜色图值是分数(行的值)。

如果我能弄清楚如何交换颜色图和 Y 轴,那么我希望我可以继续研究如何规范化每列的总体,而不是将其作为原始索引:0 到 18000。但是我这几天一直在尝试这样做,但还没有接近我想要的。

理想情况下,我想要这样的东西:https ://imgur.com/a/3A0​​eaOD 。当然,在热图中,会有渐变而不是纯色。

如果有人可以回答,我有这些问题:

  1. 我正在尝试做的事情是否可以实现/这是我可以用热图做的事情吗?还是我应该使用不同的表示?
  2. 这可能与我的输入数据的表示方式有关吗?如果是这样,在构建这样的热图时正确的表示是什么?

任何其他指导将不胜感激。

标签: pythonpython-2.7matplotlibseabornheatmap

解决方案


推荐阅读