如何为Matplotlib折线图设置不等间距的X轴刻度?
实现Matplotlib折线图X轴不等间距的方法
问题出在你直接用字符串类型的tenor作为X轴数据——Matplotlib会把这类分类变量的每个类别都当成等间距的独立项,所以刻度间距一致。要实现不等间距,得把tenor转换成对应的连续时间数值(比如总月数),基于数值绘图后再替换回原标签。
具体修改步骤如下:
- 编写转换函数,将
tenor文本转为月数:1M=1,3M=3,6M=6,1Y=12,5Y=60,10Y=120 - 用转换后的月数作为X轴数据绘制折线图
- 自定义X轴刻度的位置和标签,让刻度位置对应实际月数,标签显示原
tenor文本
修改后的完整代码:
import matplotlib.pyplot as plt import pandas as pd import io temp = u""" tenor,yield 1M,5.381 3M,5.451 6M,5.505 1Y,5.393 5Y,4.255 10Y,4.109 """ data = pd.read_csv(io.StringIO(temp), sep=",") # 定义转换函数:将tenor转为月数 def tenor_to_months(tenor): unit = tenor[-1] value = int(tenor[:-1]) if unit == 'M': return value elif unit == 'Y': return value * 12 # 添加月数列 data['months'] = data['tenor'].apply(tenor_to_months) # 基于月数绘制折线图 plt.plot(data['months'], data['yield']) # 设置X轴刻度:位置为月数,标签为原tenor plt.xticks(data['months'], data['tenor']) # 可选:添加轴标签 plt.xlabel('Tenor') plt.ylabel('Yield') plt.show()
这样生成的图表X轴刻度间距就会和实际时间跨度对应:1Y到5Y之间的间距会比6M到1Y的间距大很多,符合真实的时间间隔。
内容的提问来源于stack exchange,提问作者user3685918
相关产品推荐
相关产品推荐

