python - 如何在 python 中从三个列表创建热图?

标签 python pandas numpy matplotlib heatmap

我有 3 个数据数组:initial_R、initial_v 和 E_total。

   import numpy as np
   import matplotlib
   import matplotlib as mpl
   import matplotlib.pyplot as plt
   import seaborn as sns
   import pandas as pd
   
   initial_R=[]
   initial_v=[]
   E_total=[]

然后我有一段代码来填充这三个数组。我不会将其发布在这里,因为它很长,但它确实有效。

initial_R 是 x 坐标,initial_v 是 y 坐标,E_total 是这些坐标处的强度值。我想将其绘制为一个简单的热图,每个方 block 都着色为两种颜色之一,具体取决于 E_total 是正数还是负数。

    df = pd.read_clipboard()
    df.drop_duplicates(['initial_R','initial_v'], inplace=True)
    pivot = df.pivot(index='initial_R', columns='initial_v', values='E_total')
    ax = sns.heatmap(pivot,annot=True)
    plt.show()

    print (pivot)

我以前见过上面的代码,但它不适用于我的数据,说实话我不确定它是如何工作的。

最佳答案

您可以使用numpy.sign来获取值的符号:

import pandas as pd
import seaborn as sns

df = pd.DataFrame({'initial_R': [1, 2, 3, 1, 3, 1, 2],
                   'initial_v': [0, 0, 0, 1, 1, 2, 2],
                   'E_total': [-1, 2, -4, -3, 0, -1, 5]})

df.drop_duplicates(['initial_R','initial_v'], inplace=True)

pivot = df.pivot(index='initial_R', columns='initial_v', values='E_total')

sns.heatmap(np.sign(pivot), annot=True)

如果您想组合 0 和正值:

sns.heatmap(pivot.ge(0).astype(int).mask(pivot.isna()), annot=True)

输出1:

enter image description here

输出2:

enter image description here

如果您想要自定义标签:

pivot2 = pivot.ge(0).astype(int).mask(pivot.isna())

sns.heatmap(pivot2, annot=pivot2.replace({0: 'negative', 1: 'positive'}), fmt='s')

输出:

enter image description here

关于python - 如何在 python 中从三个列表创建热图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75662290/

相关文章:

python - 将包含可变长度列表的数据框列转换为数据框中的多列

python - 如何有效地扫描二维 numpy 数组?

python - Windows 和 Ubuntu 之间 Numpy 数组的内存使用差异

python - 使用外部库在 Google Cloud App Engine 上部署 Django 项目

python - 如何使用 Python C/C++ 接口(interface)将实例成员函数作为 PyCFunction 类型传递

python - 使用 RegEx 查找无序单词

python - 在函数中调用 locals() 不直观?

python - 将 Dataframe 列中的列表拆分为特定的列名称

python/pandas 查找两个日期之间的年数

python - 最小二乘法如何处理给定函数