更改 seaborn 热图的轴

Changing the axis of a seaborn heatmap

我有一组笛卡尔坐标对,每对都有一个二进制变量。我正在绘制一个热图,在每个箱子中,我计算落入该箱子的坐标分数,其中二进制变量为 1。

我的问题出在轴上。如下图所示,生成的轴是字符串,代表 bin 边界。我希望轴是笛卡尔坐标。有没有简单的方法来改变这个?

import numpy as np
import pandas as pd
import seaborn as sb
np.random.seed(0)
x = np.random.uniform(0,100, size=200)
y = np.random.uniform(0,100, size=200)
z = np.random.choice([True, False], size=200, p=[0.3, 0.7])
df = pd.DataFrame({"x" : x, "y" : y, "z":z})
binsx = 8
binsy = 5
res = df.groupby([pd.cut(df.y, binsy),pd.cut(df.x,binsx)])['z'].mean().unstack()
ax = sb.heatmap(res)
ax.axis('equal')
ax.invert_yaxis()

下面通过使用直方图的 bin 作为图像的范围来创建比例。

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

np.random.seed(0)
x = np.random.uniform(0,100, size=200)
y = np.random.uniform(0,100, size=200)
z = np.random.choice([True, False], size=200, p=[0.3, 0.7])
df = pd.DataFrame({"x" : x, "y" : y, "z":z})
binsx = np.arange(0,112.5,12.5)
binsy = np.arange(0,120,20)
res = df.groupby([pd.cut(df.y, binsy),pd.cut(df.x,binsx)])['z'].mean().unstack()

plt.imshow(res, cmap=plt.cm.Reds, 
           extent=[binsx.min(), binsx.max(),binsy.min(),binsy.max()])
plt.xticks(binsx)
plt.yticks(binsy)
plt.colorbar()
plt.grid(False)


plt.show()