1.问题概要
问题:用Hermite插值得到2024年收益率曲面,要求,给出程序代码以及曲面图,参考“中债债券收益率曲线和估值和估值基本原则”,工具不限,推荐用python。
给的数据为excel表格,数据为“2024年中债国债收益率曲线标准期限信息.xlsx”,要求实现最终结果如下图的代码:
2.题目分析
首先,我们分析题目所给出的文件,共有四列,一千多行,然后跟图片对比,要想实现题目的要求,我们绘制三维图需要:1、找到xyz轴的数据;2、使用python折线图函数;3、设置图例以及坐标轴标签。
这样,我们就能确定自己所需要的库以及技术。
3.整体架构流程
考虑题目要求使用python,所有只能用python来写,实际上要是想实现这个图,用matlab写起来也是很快的。使用python来绘制如上图的三维折面图,需要考虑用到如下几个三方库,保证已经pip安装好:
- pandas
- matplotlib
4.技术细节
编写该代码需要的基础有:
- 会使用pandas库,因为题目给的是excel文件,所以我们要用pandas处理数据。
- 会使用matplotlib,当然,这个库的函数特别多,我们不太可能一一记住函数用法,这时候只需要百度即可,或使用文心进行提问怎么进行折线图的绘制,我们得知绘三维图需要用到plot_trisurf这个函数。
- 数据的预处理,因为通过观察得知,我们excel第一列是一个时间数据,如果将其直接作为x轴的话是不可行的,我们需要将这一列全转为数字,用到的方法就是将相同的日期编为一个数值,例如前17个数据都改为0,后面改为1,其次是2,等等直到最后一行数据。
- 绘图并使用图例函数,将xyz的label设置为该题目中的要求。
具体代码如下
import pandas as pd
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from matplotlib.ticker import MaxNLocator
# 读取Excel文件
# 准备数据
data = pd.read_excel('data.xlsx', parse_dates=['日期'])
df=data
dates=df.index
x=[0]
date=data['日期']
#数据预处理
for i,j in enumerate(date[0:-2]):
if j==date[i+1]:
x.append(x[-1])
else:
x.append(x[-1]+1)
x.append(x[-1])
y = df['标准期限(年)']
z = df['收益率(%)']
# 创建图形和三维轴对象
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# 绘制折面
ax.plot_trisurf(x, y, z)
# 显示图形
# 添加图例(可能需要手动调整位置以免重叠)
ax.legend(loc='upper left', bbox_to_anchor=(1, 1))
# 设置坐标轴标签
ax.set_xlabel('Dates')
ax.set_ylabel('Time to Maturity')
ax.set_zlabel('Forward Rates')
# 设置坐标轴刻度(可选)
df.set_index('日期', inplace=True)
plt.show()
# 显示图形
5.扩展
matplotlib 是一个 Python 的 2D 绘图库,它生成出版质量级别的图形用于各种硬拷贝格式和跨平台的交互式环境。它是 Python 数据可视化领域最常用的库之一。
以下是一个简单的 matplotlib 使用示例,我们将绘制一个简单的折线图:
import matplotlib.pyplot as plt
import numpy as np
###### 创建一个数据集
x = np.linspace(0, 10, 100) # 创建一个从0到10的等差数列,包含100个点
y = np.sin(x) # 计算每个x对应的sin值
###### 创建一个新的图形
plt.figure()
###### 在图形上绘制数据
plt.plot(x, y)
###### 添加标题和轴标签
plt.title('Sine Curve')
plt.xlabel('x')
plt.ylabel('sin(x)')
###### 显示图形
plt.show()
这段代码会生成一个包含正弦曲线的图形。下面是这个图形的一个示例:
- 在这个示例中,我们首先导入了 matplotlib.pyplot 模块,并习惯性地使用别名 plt。我们也导入了 numpy 库,它用于创建和操作大型多维数组和矩阵,并包含大量的高级数学函数。
- 然后,我们创建了一个数据集,包含 x 轴的100个点(从0到10的等差数列)和对应的 y 轴值(这些点的正弦值)。
- 接着,我们使用 plt.figure() 创建一个新的图形。然后,我们使用 plt.plot() 函数在这个图形上绘制数据。我们还添加了标题和轴标签,以使图形更具可读性。
- 最后,我们使用 plt.show() 函数显示图形。这将打开一个窗口,显示我们刚刚创建的图形。
小结
该文为提供使用python读取excel文件,并绘制三维折面图的代码,并设置相应的图例。
matplotlib 是 Python 中一个强大的数据可视化库,它允许用户创建各种静态、动态、交互式的2D图形。
这个示例展示了 matplotlib 的基本用法,包括创建数据集、绘制图形、添加标签和显示图形。通过调整参数和添加更多功能(如图例、网格线、颜色、线型等),用户可以创建出更复杂、更丰富的图形。matplotlib 的强大功能和灵活性使其成为数据分析和科学计算中不可或缺的工具之一。