在 Seaborn 热图上绘制离散 X/Y 值

Plotting discrete X/Y values over Seaborn heatmap

我正在尝试在 Seaborn 热图上标记特定的 X/Y 坐标。输出绘制了正确的 X 坐标,但将 Y 绘制为最小值 zero/axis。代码及其热图输出如下所示。

speeds = pd.read_csv('pytest20140730.csv') 
speedspiv = pd.pivot_table(speeds, values = 'speed', index = 'road_order',
                           columns = 'tod_value', aggfunc = np.mean)
speedspiv = speedspiv.sort_index(axis=0, ascending = False)
plt.subplots(figsize=(20,15))
ax = sns.heatmap(speedspiv)
ax.scatter(414, 0.244444444, marker='*', s=100, color='yellow') 

见下图 x 轴上的黄色星号

Y 轴值绘制不正确是怎么回事?

seaborn 热图生成带有 x 轴和 y 轴的图,它们是基于索引的,而不是基于数据的。这意味着,即使标记为 382...453,y 轴也从 0 变为 71。 要对此进行测试,只需打印 ax.get_xlim()ax.get_ylim().

的结果

对于将标记放在热图中有意义的位置的问题,这意味着您必须计算标记的 x 和 y 值的正确(分数)索引并使用这些在散点图中:

x_vals = np.linspace(0, 1, 1500)    #  I don't know the real range of you x-data
x_idx = np.interp(.24, x_vals, range(len(x_vals)))
y_vals = np.arange(382, 453)
y_idx = np.interp(414, y_vals, range(len(y_vals)))

In: x_idx, y_idx
Out: (359.76, 32.0)