如何创建以时间范围为X轴、展示注册时间的事件注册数据可视化图表?
问题描述
现有一个包含以下列的DataFrame:
event_number:事件IDregister_start:事件开始时间(datetime类型)register_deadline:事件注册截止时间(datetime类型)customer_id:客户(参与者/注册者)IDregistered_on:客户注册该事件的时间日志(datetime类型)
尝试过创建透视表,但无法生成所需图表。需求是:创建一个图表,将X轴刻度设为对应事件的register_start到register_deadline时间范围,在该范围内绘制指定事件的所有registered_on记录。
曾尝试的代码:
df1.plot(xticks=df1.iloc[1], y='registered_on')
解决方案
1. 筛选目标事件数据
先提取指定事件的所有记录,并获取该事件的注册时间范围:
import pandas as pd import matplotlib.pyplot as plt # 替换为你要分析的目标事件ID target_event = "EV001" event_data = df[df['event_number'] == target_event].copy() # 获取当前事件的注册起止时间(同一事件的起止时间应该一致,取第一条即可) event_start = event_data['register_start'].iloc[0] event_deadline = event_data['register_deadline'].iloc[0]
2. 绘制单条注册记录散点图
用散点图直观展示每个用户的注册时间点,锁定X轴为事件的注册时间范围:
plt.figure(figsize=(10, 4)) # 用竖线标记每个注册时间点 plt.scatter(event_data['registered_on'], [1]*len(event_data), marker='|', s=300, color='#2ecc71', label='用户注册') # 强制X轴范围为事件的注册起止时间 plt.xlim(event_start, event_deadline) # 图表美化 plt.xlabel('时间') plt.title(f'事件{target_event} 注册时间分布') plt.yticks([]) # 隐藏Y轴刻度,仅保留标记意义 plt.legend() plt.xticks(rotation=45) plt.tight_layout() plt.show()
3. 可选:统计时段注册人数(直方图)
如果需要查看不同时间段的注册人数分布,用直方图更合适:
plt.figure(figsize=(10, 4)) # 按时间区间统计注册人数,bins可根据需求调整数量或自定义区间 plt.hist(event_data['registered_on'], bins=15, range=(event_start, event_deadline), edgecolor='black', color='#3498db') plt.xlim(event_start, event_deadline) plt.xlabel('时间') plt.ylabel('注册人数') plt.title(f'事件{target_event} 各时段注册人数分布') plt.xticks(rotation=45) plt.tight_layout() plt.show()
内容的提问来源于stack exchange,提问作者tarsal11
相关产品推荐
相关产品推荐

