python - 使用索引和列作为 X、Y 和值作为 Z,将 pandas DataFrame 转换为 3d 图形?

标签 python pandas matplotlib

我正在尝试使用 Pandas Dataframe 创建 3d 波动率表面,我觉得我掌握了所有信息,但我不确定如何从中创建 3d 图形。我读过的每本指南似乎都使用了 3 个单独的数组,但我觉得我拥有的数据应该是可图形化的。

我当前的数据框如下所示:

我希望我的 X 值是我的索引,Y 值是列名(月份),Z 值是框架中包含的实际值(例如,第一个值在第一行第一列... X = 35,Y = 9/20/2019,Z = 0.0879441)

   09/20/2019   10/18/2019  11/15/2019  12/20/2019  01/17/2020
35  0.0879441   0.0883913   0.0909429   0.0987415   0.0987912
40  0.0833955   0.0837764   0.087088    0.0939974   0.0943858
45  0.0788468   0.0810964   0.084231    0.0905135   0.0912521
50  0.0766043   0.0784164   0.0820014   0.0891319   0.0871471
55  0.0743284   0.0744855   0.0757832   0.0729094   0.068998
60  0.0612799   0.0664453   0.0758287   0.0729539   0.0690739
65  0.0613116   0.0664716   0.0655504   0.0622985   0.0630833

环顾四周后,我尝试模仿代码 here : 特别是在 Cell 5 和 6 中。下面是我的代码

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt

X = my_dataframe.index

Y = my_dataframe.columns


def lookup(row, cols):
    return(my_dataframe.loc[x,y])

Z = lookup(x,y)


fig = plt.figure()
ax = plt.axes(projection = '3d')

ax.contour3D(X,Y,Z)

我基本上将 Z 定义为 X、Y 的函数,希望它能起作用,但无济于事,我收到一条错误消息:

Length of x must be number of columns in z

我在这里做错了什么? Fwiw 我确实在链接中使用 X,Y = np.meshgrid() 但这也不起作用所以我发布了我最初的尝试。

编辑:根据一些评论的建议,我将代码更改为:

Y = my_dataframe.index

my_dataframe.columns = [1,2,3,4,5]

X = my_dataframe.columns


Z = my_dataframe.values

fig = plt.figure()
ax = plt.axes(projection = '3d')

ax.contour3D(X,Y, Z)

我将列从日期更改为只有数字,以确保它们是数字类型。我还将 Z 设置为等于数据帧的值。我现在收到一个新错误:

 setting an array element with a sequence.

最佳答案

这适用于:

Run the code on google colab

import pandas as pd
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt

d = {10: [1, 2], 20: [3, 4]}
my_dataframe = pd.DataFrame(data=d)
#  10  20
#  ------
#0  1   3
#1  2   4

X = my_dataframe.index

Y = my_dataframe.columns

Z = my_dataframe.values


fig = plt.figure()
ax = plt.axes(projection = '3d')

ax.contour3D(X,Y,Z)

关于python - 使用索引和列作为 X、Y 和值作为 Z,将 pandas DataFrame 转换为 3d 图形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57667213/

相关文章:

java - 无法实例化 Kafka 结构化流 KafkaSourceProvider

python - SWIG 与 python 和 C : arguments

python - Matplotlib:响应点击事件

python - 如何平滑多边形点之间的线?

python - 用于查找范围内数字的最大倍数的数学函数

python - Pandas :使用字典(包括运算符)从数据框中返回列子集

python - 在 pandas 中合并两个以上的文件与一列和公共(public)索引

python - 将 Pandas 数据框中的每一行复制到单个文件

python - 在 Windows 下使用 matplotlib 保存 python 绘图失败

python - 拥有以 pandas 数据集列作为行的数据透视表的有效方法是什么?