如何将表格首行日期作为X轴,绘制多ID对应数据的多折线图
实现方案(Python 环境)
前置依赖
需要提前安装以下库:
- pandas
- matplotlib
- seaborn
安装命令:pip install pandas matplotlib seaborn
代码实现
import pandas as pd import matplotlib.pyplot as plt import seaborn as sns from matplotlib.dates import DateFormatter import matplotlib.dates as mdates # 1. 读取数据,本地csv文件可替换为 pd.read_csv("你的数据文件路径.csv") data = { "ID": ["ID_1", "ID_2", "ID_3", "ID_4", "ID_5"], "01-02-2018": [0.5, 0.3, 0.4, 0.6, 0.8], "02-02-2018": [0.3, 0.2, 0.6, 0.7, 0.4], "03-02-2018": [0.6, 0.5, 0.4, 0.4, 0.3], "29-03-2018": [0.4, 0.5, 0.3, 0.2, 0.6], "30-03-2018": [0.5, 0.3, 0.4, 0.2, 0.8] } df = pd.DataFrame(data) # 2. 宽表转长表,适配绘图逻辑 df_long = df.melt(id_vars="ID", var_name="date", value_name="value") # 3. 转换日期格式,避免X轴按字符串排序出现混乱 df_long["date"] = pd.to_datetime(df_long["date"], format="%d-%m-%Y") # 4. 画布配置 plt.figure(figsize=(14, 6), dpi=100) # 5. 绘制多折线,按ID区分 sns.lineplot(data=df_long, x="date", y="value", hue="ID", marker="o", linewidth=2) # 6. X轴日期显示优化,避免标签重叠 plt.gca().xaxis.set_major_formatter(DateFormatter("%d-%m-%Y")) # 日期太多可开启下一行配置,仅每周显示1个刻度 # plt.gca().xaxis.set_major_locator(mdates.WeekdayLocator(interval=1)) plt.xticks(rotation=45, ha="right") # 7. 图表信息配置 plt.xlabel("日期") plt.ylabel("数值") plt.title("不同ID的时间序列变化折线图") plt.legend(title="ID编号") plt.tight_layout() plt.show()
注意事项
- 完整包含2018-02-01到2018-03-30所有日期的数据集可直接套用上述逻辑,无需修改转换规则
- 可在
sns.lineplot中添加palette、style参数自定义折线的颜色、线型
内容的提问来源于stack exchange,提问作者Rajesh Ahir
相关产品推荐
相关产品推荐

