You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建X轴为天数、按年份着色的累计行驶距离折线图

累计行驶距离折线图绘制修正方案

需求说明

绘制累计行驶距离折线图,要求:

  • 每年数据使用不同颜色区分
  • X轴设置为一年中的天数(如1-365),便于对比各年份行驶趋势差异

示例数据集

datedistance
01/01/20108
02/01/20105
03/01/20106
04/01/20109
05/01/201012
06/01/20107
07/01/20109
08/01/20106

当前使用代码

import pandas as pd
import matplotlib.pyplot as plt


df = pd.read_csv('sample_data.csv')

df['date'] = pd.to_datetime(df['date'])

df_years = df[df['date'].dt.year.isin(range(2010, 2016))]
df_years = df_years.sort_values(by='date')
cumulative_distance = df_years.groupby(df_years['date'].dt.year)['distance'].cumsum()


colors= ['white', 'white', 'white', 'white', 'white', 'white']
for year, color in zip(range(2010,2016), colors):
    mask = (df_years['date'].dt.year == year)
    plt.plot(df_years.loc[mask, 'date'], cumulative_distance[mask], color=color, label=str(year))


plt.title('Cumulative Distance Traveled in 2010 - 2015')
plt.xlabel('Date')
plt.ylabel('Distance')
plt.legend()


plt.show()

效果问题

  • 期望效果:X轴为一年中的天数,各年份折线在同一X轴范围平行展示,颜色区分明显
  • 当前问题:X轴是具体日期导致年份分散,且颜色全白无法看到折线

修正代码及说明

关键修改点:

  1. 新增day_of_year字段,将日期转换为一年中的天数,作为X轴数据
  2. 替换颜色列表为可区分的彩色值
  3. 将累计距离合并到原数据框,方便按年份筛选绘图
  4. 绘图时X轴使用day_of_year而非原始日期

完整修正代码

import pandas as pd
import matplotlib.pyplot as plt

# 读取并处理数据
df = pd.read_csv('sample_data.csv')
df['date'] = pd.to_datetime(df['date'])

# 筛选目标年份数据并排序
df_years = df[df['date'].dt.year.isin(range(2010, 2016))].sort_values(by='date')

# 计算一年中的天数和累计行驶距离
df_years['day_of_year'] = df_years['date'].dt.dayofyear
df_years['cumulative_distance'] = df_years.groupby(df_years['date'].dt.year)['distance'].cumsum()

# 定义区分度高的颜色列表
colors = ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd', '#8c564b']

# 按年份绘图
for year, color in zip(range(2010, 2016), colors):
    year_data = df_years[df_years['date'].dt.year == year]
    plt.plot(year_data['day_of_year'], year_data['cumulative_distance'], color=color, label=str(year))

# 设置图表样式
plt.title('Cumulative Distance Traveled (2010-2015)')
plt.xlabel('Day of Year')
plt.ylabel('Total Cumulative Distance')
plt.xlim(1, 366)  # 覆盖全年天数范围
plt.legend(title='Year')
plt.grid(alpha=0.3)

plt.show()

内容的提问来源于stack exchange,提问作者Pablo3090

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 15:32:16