Matplotlib从2D pandas dataframe生成3D曲面图

bsxbgnwa  于 2023-04-28  发布在  其他
关注(0)|答案(2)|浏览(168)

我有一个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教程和相关的答案,但仍然卡住了。如果有人能给我指出正确的方向,我将非常感激。

fwzugrvs

fwzugrvs1#

只要取列名称(['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)

smtd7mpg

smtd7mpg2#

您所采用的一般策略是好的。您所遇到的唯一错误是您从字符串列表创建了一个meshgrid。当然maplotlib不能绘制字符串。
因此,您可以创建一个长度与dataframe中的列数相同的数组,并将其插入meshgrid

x = np.arange(len(df.columns))

相关问题