You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 14:40:33