You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Seaborn热力图离散X/Y值绘制问题:Y轴坐标显示异常

问题原因与解决方案

你遇到的问题核心是混淆了Seaborn热力图的Y轴坐标系统和你数据中的实际road_order数值。

Seaborn绘制热力图时,Y轴的坐标是基于你的DataFrame的行索引位置(从0开始,依次对应每一行),而不是road_order列的实际数值。你传入的0.244444444是road_order的某个实际值,但matplotlib的scatter方法需要的是这个值在热力图Y轴上对应的位置索引,而不是数值本身,所以它被当成了坐标值,直接落在了Y轴的最底部(0位置)。

解决步骤

  • 先确定你要标记的目标road_order值对应的行索引位置;
  • 用这个位置索引作为scatter的Y坐标参数;
  • 同时确认X坐标414确实是目标tod_value对应的列索引位置(如果你的列数足够多,这个是没问题的)。

修改后的代码示例

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

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)

# 假设你要标记的road_order值是0.244444444,先获取它的行索引位置
target_road_order = 0.244444444
y_pos = speedspiv.index.get_loc(target_road_order)
# X坐标414如果是目标tod_value的列索引位置,直接使用
ax.scatter(414, y_pos, marker='*', s=100, color='yellow')

plt.show()

额外说明

如果你的road_order是连续数值,且存在索引不匹配的情况(比如索引不是连续的),get_loc仍然能正确找到对应行的位置。如果有多个相同的road_order值,get_loc会返回一个布尔数组,这时你需要根据需求选择对应的行位置。

内容的提问来源于stack exchange,提问作者cdm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:19:08