簡體   English   中英

來自2D熊貓數據幀的Matplotlib 3D表面圖

[英]Matplotlib 3D surface plot from 2D pandas dataframe

我有一個包含四列測量數據的pandas數據幀。 我想創建一個三維曲面圖,行索引為X,列索引為Y,數據為Z.(每列中的數據是一系列離散測量輸出,來自測試,逐步執行所有值每個類別X的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教程及相關答案,但仍然卡住了。 如果有人能指出我正確的方向,請將非常感激。

你追求的一般策略很好。 您唯一的錯誤是您從字符串列表創建meshgrid。 當然maplotlib不能繪制字符串。

因此,您可以創建一個與數據meshgrid列數相同長度的數組,並將其插入到meshgrid

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

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

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM