Matplotlib绘制国债收益率曲线出现2D形状而非1D折线该如何解决
问题核心原因
出现2D填充形状而非折线的最常见诱因是两种:
- 待绘制的三列数据不是数值类型(为object/字符串类型),matplotlib无法按连续数值规则绘制折线
- 索引未排序,折线绘制时会在高低值之间反复横跳,形成大量重叠的封闭区域
解决步骤
- 转换数据为数值类型
执行以下代码将目标列转为浮点型,无法转换的异常值会自动设为缺失值NaN:
import pandas as pd # 请将下方列名替换为你实际的三列名称 df[['1年期', '5年期', '10年期']] = df[['1年期', '5年期', '10年期']].apply(pd.to_numeric, errors='coerce')
- 处理索引与排序
如果你的索引是日期类型,先转为标准datetime格式再按时间升序排列:
df.index = pd.to_datetime(df.index) df = df.sort_index()
- 可选:处理缺失值
如果存在缺失值可以选择删除空值或者插值补全:
# 方式1:删除含缺失值的行 df = df.dropna() # 方式2:线性插值补全缺失值 # df = df.interpolate()
绘图示例代码
import matplotlib.pyplot as plt plt.figure(figsize=(12, 6)) # 逐个绘制三列折线 plt.plot(df.index, df['1年期'], label='1年期国债收益率', linewidth=1) plt.plot(df.index, df['5年期'], label='5年期国债收益率', linewidth=1) plt.plot(df.index, df['10年期'], label='10年期国债收益率', linewidth=1) plt.xlabel('日期') plt.ylabel('收益率(%)') plt.title('国债收益率曲线') plt.legend() plt.grid(alpha=0.3) plt.show()
内容的提问来源于stack exchange,提问作者John P.
相关产品推荐
相关产品推荐

