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

Matplotlib折线图中Actuals与Budget数据缺失2023-2024连接问题

折线图中Actuals与Budget数据间无连线的原因及解决办法

原始数据与绘图代码

原始DataFrame数据:

import pandas as pd
df = pd.DataFrame( {'Area': ['Water', 'Water', 'Water', 'Water', 'Water'],
      'Year': ['2021', '2022', '2023', '2024', '2025'],
      'Amount': [1530.72, 1925.39, 1700.00, 2000.00, 2160.00],
      'Type': ['Actuals', 'Actuals', 'Actuals', 'Budget', 'Budget']})

需求:绘制以Year为X轴、Amount为Y轴的折线图,Actuals用实线,Budget用虚线。当前绘图代码:

import matplotlib.pyplot as plt
plt.plot('Year', 'Amount', data=df[df['Type'] == 'Actuals'], marker='o', color='grey', linewidth=2)
plt.plot('Year', 'Amount', data=df[df['Type'] == 'Budget'], marker='o', color='grey', linewidth=2, linestyle='--')

问题原因

你把Actuals和Budget拆成了两个完全独立的数据集分别绘图:

  • Actuals数据集仅包含2021-2023年的数据
  • Budget数据集仅包含2024-2025年的数据

Matplotlib只会在同一个数据集的连续数据点之间连线,不会自动跨数据集连接两个独立折线的端点,所以2023和2024之间没有连线。

解决办法

方法1:补充衔接数据点

把2023年的Actuals数据复制一条并标记为Budget,让Budget数据集包含2023年的节点,这样绘图时折线就能自然衔接:

# 复制2023年的Actuals数据,修改Type为Budget
actual_last = df[df['Year'] == '2023'].copy()
actual_last['Type'] = 'Budget'
# 合并到原数据
df_combined = pd.concat([df, actual_last], ignore_index=True)

# 重新绘图
plt.plot('Year', 'Amount', data=df_combined[df_combined['Type'] == 'Actuals'], marker='o', color='grey', linewidth=2)
plt.plot('Year', 'Amount', data=df_combined[df_combined['Type'] == 'Budget'], marker='o', color='grey', linewidth=2, linestyle='--')

方法2:先画完整实线再覆盖虚线

如果希望整个折线连续,仅2024年之后切换为虚线,可以先绘制全部数据的实线,再用Budget部分的虚线覆盖对应区间:

# 绘制完整的实线折线
plt.plot(df['Year'], df['Amount'], marker='o', color='grey', linewidth=2)
# 用虚线覆盖Budget部分的数据点
plt.plot(df[df['Type'] == 'Budget']['Year'], df[df['Type'] == 'Budget']['Amount'], marker='o', color='grey', linewidth=2, linestyle='--')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 15:50:20