matplotlib轴用mdates.DateFormatter仅显示小时分钟不生效问题求助
不生效的核心原因
seaborn的heatmap默认使用分类坐标轴,你传入的datetime类型时间数据会被自动转为离散分类标签处理,本质是字符串索引的枚举值,不是matplotlib可识别的连续时间刻度。mdates.DateFormatter仅对连续时间型坐标轴生效,对分类轴完全无效,所以你的配置不会起作用。
解决方法
方法1:提前格式化标签传入绘图
绘图前先把datetime类型的y轴数据格式化为%H:%M格式的字符串,调用heatmap时直接指定yticklabels参数即可:
import seaborn as sns import pandas as pd import numpy as np import matplotlib.pyplot as plt # 示例数据构造 time_index = pd.date_range(start="2024-01-01 07:00", end="2024-01-01 20:00", freq="15min") test_data = pd.DataFrame(np.random.rand(len(time_index), 6), index=time_index) # 提前格式化y轴标签 formatted_yticks = test_data.index.strftime("%H:%M") # 绘图时传入格式化后的标签 ax = sns.heatmap(test_data, yticklabels=formatted_yticks) plt.show()
方法2:绘图后手动替换标签
如果不希望修改原始数据,可以在绘图完成后,获取当前y轴刻度对应的原始时间值,格式化后重新赋值给轴标签:
ax = sns.heatmap(test_data) # 读取当前y轴刻度位置,对应映射为格式化后的时间字符串 current_yticks = ax.get_yticks() new_yticklabels = [test_data.index[int(pos)].strftime("%H:%M") for pos in current_yticks] ax.set_yticklabels(new_yticklabels) plt.show()
内容的提问来源于stack exchange,提问作者Sergio Polimante
相关产品推荐
相关产品推荐

