将Datetime转换为HH:MM格式:按时段分析多日期事件并实现连续绘图
解决方法
要提取时分并保留可连续绘图的属性,核心是把时间转换成连续数值(而非字符串或离散的小时分组),这样既能保留时分的精确信息,又能支持连续的直方图绘制。
步骤1:生成连续时间数值
利用pandas的dt访问器,提取小时和分钟,将分钟转换成小时的小数部分,得到一个从0.0(00:00)到23.9833...(23:59)的连续数值列:
import pandas as pd import matplotlib.pyplot as plt import numpy as np # 模拟你的数据集 np.random.seed(42) dates = pd.date_range('2022-08-08', '2022-08-10', freq='5min') new_df = pd.DataFrame({'Datetime': np.random.choice(dates, 500, replace=True)}) # 生成连续时间数值:小时 + 分钟/60 new_df['Time_Continuous'] = new_df['Datetime'].dt.hour + new_df['Datetime'].dt.minute / 60
步骤2:绘制时分直方图
基于连续数值绘制直方图,再将X轴刻度转换为HH:MM格式,确保X轴范围覆盖00:00到23:59:
plt.figure(figsize=(10, 6)) # 按每10分钟一个区间绘制直方图(24*6=144个bins) plt.hist(new_df['Time_Continuous'], bins=144, range=(0, 24), edgecolor='black', alpha=0.7) # 设置X轴刻度与标签:每小时一个刻度,显示为HH:00 plt.xticks(np.arange(0, 25, 1), [f'{h:02d}:00' for h in range(24)]) plt.xlabel('时间 (HH:MM)') plt.ylabel('频次') plt.title('时分分布直方图') plt.xlim(0, 24) plt.grid(axis='y', linestyle='--', alpha=0.7) plt.show()
方法优势
- 避免了字符串时间的离散性,支持连续的直方图区间划分;
- 保留了分钟级的细节,不会像按小时分组那样丢失精度;
- 连续数值适配直方图的连续X轴需求,通过刻度标签转换回
HH:MM格式,兼顾数据准确性和可视化可读性。
内容的提问来源于stack exchange,提问作者P1ker
相关产品推荐
相关产品推荐

