2012-07-10 114 views
7

我有一個2D numpy數組,我想用3D繪製它。我聽說過mplot3d,但我無法正常工作用mplot3d繪製二維數組

這是我想要做的一個例子。我有一個數組(256,1024)。它應繪製一個3D圖形,其中x軸從0到256,y軸從0到1024,並且圖形的z軸顯示每個條目處數組的值。

我該如何解決這個問題?

回答

0

您可以在Matplotlib gallery的其中一個示例中找到答案; 3D示例即將結束。

更一般地說,Matplotlib畫廊是一個很好的第一站資源,用於尋找如何做一些情節。

我看到的例子基本上與三個三維數組:一個具有所有x值,一個具有所有y值,最後一個具有所有z值。所以,一種解決方案是創建x和y值的數組(例如meshgrid())。 。

10

這聽起來像你正試圖創建一個surface圖(或者你可以畫一個wireframe情節或filled countour plot

從有關的資料,你可以嘗試沿着線的東西:

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

# Set up grid and test data 
nx, ny = 256, 1024 
x = range(nx) 
y = range(ny) 

data = numpy.random.random((nx, ny)) 

hf = plt.figure() 
ha = hf.add_subplot(111, projection='3d') 

X, Y = numpy.meshgrid(x, y) # `plot_surface` expects `x` and `y` data to be 2D 
ha.plot_surface(X, Y, data) 

plt.show() 

顯然,你需要比,以獲得合理的表面使用numpy.random選擇更合理的數據。

+0

感謝您的回答;)也許我有點愚蠢,但我真的不知道如何讓我的二維陣列在兩個二維數組和一個列表中:o – Fourier 2012-07-10 09:00:59

+0

我已經爲你做了這個:'x,y =範圍(nx),範圍(ny)'將創建x和y值的一維列表,並且行X,Y = numpy.meshgrid(x,y)'將這些列表轉換爲2D NumPy數組(必須安裝NumPy爲Matplotlib工作,所以你已經在你的系統上有這個)。如果您有其他問題,也許您可​​以編輯您的問題以提供更多信息,例如,包括您試圖繪製的數據。 – Chris 2012-07-10 09:05:50

+1

您的2D數組在上面的代碼中被簡單地稱爲'data',其大小被稱爲'nx','ny'。希望這可以讓你走。 – EOL 2012-07-10 09:07:20

0

您還可以使用oct2py這個模塊實際上是一個python-octave橋。使用它你可以利用八度的功能,你可以得到你需要的東西,而且它也很容易。

退房本文檔:https://www.gnu.org/software/octave/doc/v4.0.1/Three_002dDimensional-Plots.html

而對於樣品例如:

from oct2py import octave as oc 

tx = ty = oc.linspace (-8, 8, 41) 
[xx, yy] = oc.meshgrid (tx, ty) 
r = oc.sqrt (xx * xx + yy * yy) + oc.eps() 
tz = oc.sin (r)/r 
oc.mesh (tx, ty, tz) 

以上是Python代碼,這是因爲在八度以上文檔中實現的第一示例相同。