首页 > 解决方案 > 从 DataFrame 图中制作 seaborn 热图以了解数据范围

问题描述

如何制作 seaborn 热图(从 pandas DataFrame 图创建)以了解数据范围?即,当我将鼠标指针悬停在绘图上时,我可以在绘图窗口的右下角看到"x= y=",而我想查看悬停在绘图上的点的坐标(例如,"x=25.6, y=3.3" ),当然,假设输入 DataFrame 包含一个 2D 直方图,每个轴上的 bin 大小相等。

或者,也许我可以用不同的方式创建这样的情节来达到同样的效果?例如,ax.hist2d我将它开箱即用,但我希望能够使用每个 bin 的自定义代码内容进行计算,并使其有效地成为热图(使用 bin 内容的颜色编码)。

import numpy as np 
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
Index = [ 1.0,  2.0,  3.0,  4.0,  5.0]
Cols  = [10.0, 20.0, 30.0, 40.0, 50.0]
df = pd.DataFrame(abs(np.random.randn(5, 5)), 
    index=Index, columns=Cols)
plt.close(1)
fig,ax = plt.subplots(num=1)
sns.heatmap(df, annot=True)
plt.show(block=False)

谢谢您的帮助!

标签: pandasmatplotlibplotseabornheatmap

解决方案


如果你替换sns.heatmap(...)ax.imshow(..),你就接近你需要的了。然后,您可以将图像的范围设置为您需要的数据范围。

import numpy as np; np.random.seed(42)
import pandas as pd
import matplotlib.pyplot as plt

Index = [ 1.0,  2.0,  3.0,  4.0,  5.0]
Cols  = [10.0, 20.0, 30.0, 40.0, 50.0]
df = pd.DataFrame(abs(np.random.randn(5, 5)), 
    index=Index, columns=Cols)
plt.close(1)
fig,ax = plt.subplots(num=1)
dx = np.diff(df.columns)[0]/2
dy = np.diff(df.index)[0]/2
extent = [df.columns.min()-dx, df.columns.max()+dx,
          df.index.min()-dy, df.index.max()+dy] 
ax.imshow(df, extent=extent, aspect="auto")

plt.show()

在此处输入图像描述


推荐阅读