如何将时间序列中各工作日分别绘制成独立折线图?
实现按工作日分组绘制独立折线图的简便方法
当然有很简便的方法实现这个需求!我来一步步带你搞定——既能把每个工作日的数据点单独连成折线,还能给周日和其他工作日设置不同的颜色。
完整实现代码
先把补全并优化后的代码放出来,后面再拆解说明:
import pandas as pd import matplotlib.pyplot as plt import numpy as np # 生成时间序列数据 ts = pd.DataFrame( pd.Series(np.random.randn(100), index=pd.date_range('1/1/2000', periods=100)) ) ts.columns = ['quantity'] # 注意:新版本pandas中weekday_name已被弃用,改用day_name() ts['weekday'] = ts.index.day_name() # 定义颜色规则:周日红色,其他工作日黄色 color_map = {'Sunday': 'red'} # 给其他工作日默认设置黄色 other_weekdays = [day for day in ts['weekday'].unique() if day != 'Sunday'] for day in other_weekdays: color_map[day] = 'gold' # 创建画布 plt.figure(figsize=(12, 6)) # 按工作日分组,逐个绘制折线 for weekday, group in ts.groupby('weekday'): # 绘制折线,同时标记数据点 plt.plot(group.index, group['quantity'], color=color_map[weekday], marker='o', label=weekday) # 添加图表元素 plt.title('Daily Quantity by Weekday (Line Connections)') plt.xlabel('Date') plt.ylabel('Quantity') plt.legend() plt.grid(alpha=0.3) plt.xticks(rotation=45) plt.tight_layout() plt.show()
关键步骤说明
- 数据预处理:用
index.day_name()获取日期对应的星期名称(如果是旧版pandas可以换回weekday_name),给每条数据打上工作日标签。 - 颜色映射:先给周日单独指定红色,再把剩下的工作日统一设为黄色,确保颜色规则符合你的需求。
- 分组绘制:通过
groupby('weekday')把数据按工作日拆分成独立分组,然后遍历每个分组,用plt.plot()绘制折线——这样同工作日的所有数据点就会被自动连接起来,每个工作日的折线颜色也会遵循我们定义的规则。 - 细节优化:加上标记点(
marker='o')让数据点更清晰,添加图例、网格和旋转的日期标签,提升图表可读性。
这样运行代码后,你就能看到每个工作日的折线独立展示,周日的折线和点是红色,其他工作日是黄色,完全符合你的要求~
内容的提问来源于stack exchange,提问作者Vlad
相关产品推荐
相关产品推荐

