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

Matplotlib绘制乘客量折线图异常问题求助

问题排查与解决方案

核心现象:使用plt.plot(df_pass_by_year_pd['Date'], df_pass_by_year_pd['Prediction'])能正常生成线性回归曲线,但替换为PassengerCountSum后图表显示异常,以下是常见排查方向和解决办法:

1. 检查PassengerCountSum的数据有效性

  • 先确认该列是否存在非数值类型或空值:
    print(df_pass_by_year_pd['PassengerCountSum'].dtype)
    print(df_pass_by_year_pd['PassengerCountSum'].isna().sum())
    
    • 若为字符串类型,转换为数值:
      df_pass_by_year_pd['PassengerCountSum'] = pd.to_numeric(df_pass_by_year_pd['PassengerCountSum'], errors='coerce')
      
    • 若存在空值,按需填充(比如用前向填充或均值):
      df_pass_by_year_pd['PassengerCountSum'] = df_pass_by_year_pd['PassengerCountSum'].fillna(method='ffill')
      

2. 确保Date列按时间排序

折线图异常最常见的原因是X轴日期未按顺序排列——回归值Prediction本身是有序序列所以不受影响,但原始客流数据可能存在日期乱序:

  • 先对数据按Date排序:
    df_pass_by_year_pd = df_pass_by_year_pd.sort_values('Date')
    
    排序后重新绘图:
    plt.plot(df_pass_by_year_pd['Date'], df_pass_by_year_pd['PassengerCountSum'])
    plt.plot(df_pass_by_year_pd['Date'], df_pass_by_year_pd['Prediction'])
    plt.xticks(rotation=45)
    plt.show()
    

3. 处理数值量级差异

如果PassengerCountSum和Prediction的数值量级差距过大,会导致其中一条线被压缩到几乎不可见,看起来像异常。可以用双Y轴分别展示:

fig, ax1 = plt.subplots(figsize=(10,6))

# 绘制客流数据
ax1.plot(df_pass_by_year_pd['Date'], df_pass_by_year_pd['PassengerCountSum'], color='#1f77b4', label='Passenger Count')
ax1.set_xlabel('Date')
ax1.set_ylabel('Passenger Count Sum', color='#1f77b4')
ax1.tick_params(axis='y', labelcolor='#1f77b4')
ax1.legend(loc='upper left')

# 绘制回归预测曲线
ax2 = ax1.twinx()
ax2.plot(df_pass_by_year_pd['Date'], df_pass_by_year_pd['Prediction'], color='#ff7f0e', label='Prediction')
ax2.set_ylabel('Prediction', color='#ff7f0e')
ax2.tick_params(axis='y', labelcolor='#ff7f0e')
ax2.legend(loc='upper right')

plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

4. 尝试用Pandas内置绘图方法

直接使用Matplotlib的plt.plot可能存在类型适配问题,改用Pandas自带的plot方法更适配DataFrame结构:

df_pass_by_year_pd.sort_values('Date').plot(x='Date', y=['PassengerCountSum', 'Prediction'], kind='line', figsize=(10,6))
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 18:01:23