如何使用Matplotlib绘制日期维度的动作频次统计图表?
解决方法
你的问题出在直接将日期列表传入plt.plot(),这只会按索引顺序绘制每个日期的数值,完全没有统计重复日期的出现频次。要生成频次统计图表,需要先统计每个日期的出现次数,再绘图:
方法一:使用Pandas(推荐,处理时间序列更便捷)
import pandas as pd import matplotlib.pyplot as plt from datetime import datetime # 提取你的日期列表 date_list = data['Data Analyst']['DE'] # 转换为Series并统计频次,按日期排序 date_series = pd.Series(date_list) frequency = date_series.value_counts().sort_index() # 绘制频次图(可选柱状图或折线图) plt.figure(figsize=(12, 6)) frequency.plot(kind='bar') # 离散日期用柱状图,连续时间用kind='line' plt.xlabel('动作发生时间') plt.ylabel('发生频次') plt.title('各时间点动作频次统计') plt.xticks(rotation=45) # 旋转x轴标签避免重叠 plt.tight_layout() # 自动调整布局 plt.savefig('action_frequency.png')
方法二:使用标准库(无需额外安装依赖)
from collections import Counter import matplotlib.pyplot as plt from datetime import datetime # 提取你的日期列表 date_list = data['Data Analyst']['DE'] # 统计每个日期的出现次数,并按日期排序 count_result = Counter(date_list) sorted_dates = sorted(count_result.keys()) sorted_counts = [count_result[dt] for dt in sorted_dates] # 绘制折线图(或替换为plt.bar用柱状图) plt.figure(figsize=(12, 6)) plt.plot(sorted_dates, sorted_counts, marker='o', linestyle='-') plt.xlabel('动作发生时间') plt.ylabel('发生频次') plt.title('各时间点动作频次统计') plt.xticks(rotation=45) plt.tight_layout() plt.savefig('action_frequency.png')
关键说明
- 两种方法核心都是先统计重复日期的出现次数,再用统计后的结果绘图
- 如果你的日期精度很高(比如精确到秒),建议先按小时/天聚合数据,避免x轴标签过于拥挤,示例:
# Pandas按天聚合 date_series = pd.Series(date_list).dt.floor('D')
内容的提问来源于stack exchange,提问作者octaneal
相关产品推荐
相关产品推荐

