一个人如何制作海洋热图(从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)
谢谢您的帮助!
答案 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()
答案 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()))