python - 来自 2D pandas 数据框的 Matplotlib 3D 曲面图

标签 python pandas numpy matplotlib 3d

我有一个包含四列测量数据的 Pandas 数据框。我想创建一个 3D 曲面图,其中行索引为 X,列索引为 Y,数据为 Z。(每列中的数据是一系列离散测量输出,测试输出遍历所有值每个类别 Y 的 X)

import pandas as pd
import numpy as np


df = pd.DataFrame(np.random.randn(5, 4), columns=['A', 'B', 'C', 'D'])
print(df)

   A         B         C         D
0  0.791692 -0.945571  0.183304  2.039369
1 -0.474666  1.117902 -0.483240  0.137620
2  1.448765  0.228217  0.294523  0.728543
3 -0.196164  0.898117 -1.770550  1.259608
4  0.646730 -0.366295 -0.893671 -0.745815

我尝试使用 np.meshgrid 将 df 转换为 numpy 网格,如下所示,但不确定我是否真的理解需要什么,或者我是否可以以这种方式使用 df 索引。

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

x = df.columns
y = df.index
X,Y = np.meshgrid(x,y)
Z = df
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, Z)

我已经阅读了 matplotlib 3D 教程和此处的相关答案,但仍然卡住了。如果有人能指出正确的方向,我将不胜感激。

最佳答案

只需取列名称 (['A', 'B', 'C', 'D']) 即可。

您稍后可以更改 ['A', 'B', 'C', 'D'] 的轴刻度。

import pandas as pd
import numpy as np


df = pd.DataFrame(np.random.randn(5, 4))

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

x = df.columns
y = df.index
X,Y = np.meshgrid(x,y)
Z = df
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, Z)

enter image description here

关于python - 来自 2D pandas 数据框的 Matplotlib 3D 曲面图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41960448/

相关文章:

python - 统计groupby中每年出现的次数

python - 在给定索引和半径的 numpy 数组中绘制一个圆,无需外部库

Python tkinter 标签方向

Python,Enum 类型有什么用?

python - pandas 行中最大值的决胜局

python - Pandas 使用跨多个列的字典值相乘

python - numpy.random.seed() 每次总是给出相同的随机数吗?

c++ - Python Swig 包装器 : how access underlying PyObject

python - Pandas ,删除重复项但合并某些列