X Y Z 数组数据到热图

Posted

技术标签:

【中文标题】X Y Z 数组数据到热图【英文标题】:X Y Z array data to heatmap 【发布时间】:2018-01-10 06:31:46 【问题描述】:

对于这个问题或适合我需要的问题,我无法找到一致的答案——我在文本文件的三列中有数据:X、Y 和 Z。列是制表符分隔的。我想用 Python 制作这些数据的热图表示,其中 X 和 Y 位置由 Z 中的值遮蔽,范围从 0 到 1(X 和 Y 的离散概率)。我正在尝试 seaborn 的 heatmap 包和 matplotlib 的 pcolormesh,但不幸的是这些需要 2D 数据数组。

对于常数 y,我的数据从 1 到 37 遍历 X,然后在 y 中迭代 0.1。 y max 根据数据集波动,但 ymin 始终为0。

[X Y Z] row1[1...37 0.0000 Zvalue], row2[1...37 0.1000 Zvalue] 等

import numpy as np
from numpy import *
import pandas as pd
import seaborn as sns
sns.set()

df = np.loadtxt(open("file.txt", "rb"), delimiter="\t").astype("float")

关于后续步骤的任何提示?

【问题讨论】:

我知道您说过您已经研究了很多问题,但请查看this one。我刚才回答了这个问题,这似乎是您想要的,将 3 个 1D 数组放入热图中。 这绝对是完美的,谢谢! @ViníciusAguiar -- 是否可以获得更多离散颜色(去除轮廓阴影)? 如热图表示:seaborn.pydata.org/generated/seaborn.heatmap.html 我不认为我理解你的问题,但如果我理解它,恐怕我无法帮助你,最好再问一个问题或深入研究 matplotlib 的文档。 【参考方案1】:

如果我理解正确的话,你有三列 X 和 Y 表示值 Z 的位置。

考虑以下示例。共有三列:X 和 Y 包含位置信息(在本例中为类别),Z 包含用于对热图进行着色的值。

x = np.array(['a','b','c','a','b','c','a','b','c'])
y = np.array(['a','a','a','b','b','b','c','c','c'])
z = np.array([0.3,-0.3,1,0.5,-0.25,-1,0.25,-0.23,0.25])

然后我们从这些列创建一个数据框并转置它们(因此 x、y 和 z 实际上成为列)。给出列名并确保 Z_value 是一个数字。

df = pd.DataFrame.from_dict(np.array([x,y,z]).T)
df.columns = ['X_value','Y_value','Z_value']
df['Z_value'] = pd.to_numeric(df['Z_value'])

产生这个数据框。

X_value Y_value Z_value
0   a   a   0.30
1   b   a   -0.30
2   c   a   1.00
3   a   b   0.50
4   b   b   -0.25
5   c   b   -1.00
6   a   c   0.25
7   b   c   -0.23
8   c   c   0.25

由此您无法创建热图,但是通过调用 df.pivot('Y_value','X_value','Z_value') 您可以将数据框转换为可用于热图的表单。

pivotted= df.pivot('Y_value','X_value','Z_value')

生成的数据框如下所示。

X_value a   b   c
Y_value         
a   0.30    -0.30   1.00
b   0.50    -0.25   -1.00
c   0.25    -0.23   0.25

然后您可以将pivotted 提供给sns.heatmap 以创建您的热图。

sns.heatmap(pivotted,cmap='RdBu')

生成此热图。

您可能需要根据您的确切需求对代码进行一些调整。但由于我没有示例数据可供参考,因此我需要制作自己的示例。

【讨论】:

以上是关于X Y Z 数组数据到热图的主要内容,如果未能解决你的问题,请参考以下文章

使用 R 创建热图

两个或多个热图的 Python Plotly 悬停信息

如何使用Plotly Python组合热图和轮廓图

Plotly 热图中颜色条的标题

使用 pylab 生成热图

带有 X、Y 数据的 Matplotlib 热图