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
相关产品推荐
相关产品推荐

