从DataFrame绘制海图热图以了解数据范围

时间:2019-03-21 14:38:17

标签: pandas matplotlib plot seaborn heatmap

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

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

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)

谢谢您的帮助!

2 个答案:

答案 0 :(得分:1)

如果将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()

enter image description here

答案 1 :(得分:0)

from matplotlib.ticker import FixedFormatter


class CustomFormatter(FixedFormatter):
    def __init__(self, old):
        super().__init__(old.seq)

    def __call__(self, x, pos=None):
        return self.seq[abs(self.locs - x).argmin()]

plt.gca().xaxis.set_major_formatter(CustomFormatter(plt.gca().xaxis.get_major_formatter()))
plt.gca().yaxis.set_major_formatter(CustomFormatter(plt.gca().yaxis.get_major_formatter()))