如何用Python将指定DataFrame绘制成隐含波动率曲面3D图?
用Matplotlib绘制3D曲面图的步骤
1. 导入所需库
需要导入数据处理、绘图及3D绘图相关的库:
import pandas as pd import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D
2. 构造你的DataFrame
先把你提供的数据转换成可直接运行的DataFrame:
data = { 'Strike': [100, 200, 300], 1.5: [4, 6, 10], 2.7: [5, 7, 11], 3: [6, 8, 13] } df = pd.DataFrame(data)
3. 准备3D绘图的网格数据
Matplotlib的3D曲面图要求X、Y是网格形式的二维数组,和Z的维度匹配:
- X轴:提取
Strike列的数值 - Y轴:提取表头的1.5、2.7、3,转成数值类型
- Z轴:提取表格内的对应数值,转置后匹配网格维度
# 提取原始数据 x = df['Strike'].values y = df.columns[1:].astype(float).values # 跳过Strike列,转为数值 z = df.iloc[:, 1:].values # 获取所有数值单元格 # 生成网格数据 X, Y = np.meshgrid(x, y) Z = z.T # 转置Z,让维度和X、Y一致
4. 绘制3D曲面图
创建画布和3D坐标轴,调用plot_surface绘制,同时设置标签和颜色条:
# 创建画布 fig = plt.figure(figsize=(10, 7)) # 添加3D坐标轴 ax = fig.add_subplot(111, projection='3d') # 绘制曲面,设置颜色映射和边框颜色 surf = ax.plot_surface(X, Y, Z, cmap='viridis', edgecolor='lightgray') # 设置坐标轴标签 ax.set_xlabel('Strike') ax.set_ylabel('Y Axis Values') ax.set_zlabel('Z Axis Values') # 添加颜色条,对应Z轴数值 fig.colorbar(surf, shrink=0.5, aspect=5) # 显示图形 plt.show()
可选:绘制线框式3D图
如果想更清晰看到数据的网格结构,把plot_surface换成plot_wireframe即可:
ax.plot_wireframe(X, Y, Z, color='black', linewidth=0.8)
新手注意点
- 确保X、Y、Z的维度完全一致,这里通过
np.meshgrid和转置Z来实现 cmap参数可以替换成其他颜色映射,比如plasma、coolwarm- 代码可以直接复制运行,若你的DataFrame结构和示例一致,无需修改核心逻辑
内容的提问来源于stack exchange,提问作者Itrytobehelpful
相关产品推荐
相关产品推荐

