我有一個2D numpy數組,我想用3D繪製它。我聽說過mplot3d,但我無法正常工作用mplot3d繪製二維數組
這是我想要做的一個例子。我有一個數組(256,1024)。它應繪製一個3D圖形,其中x軸從0到256,y軸從0到1024,並且圖形的z軸顯示每個條目處數組的值。
我該如何解決這個問題?
我有一個2D numpy數組,我想用3D繪製它。我聽說過mplot3d,但我無法正常工作用mplot3d繪製二維數組
這是我想要做的一個例子。我有一個數組(256,1024)。它應繪製一個3D圖形,其中x軸從0到256,y軸從0到1024,並且圖形的z軸顯示每個條目處數組的值。
我該如何解決這個問題?
您可以在Matplotlib gallery的其中一個示例中找到答案; 3D示例即將結束。
更一般地說,Matplotlib畫廊是一個很好的第一站資源,用於尋找如何做一些情節。
我看到的例子基本上與三個三維數組:一個具有所有x值,一個具有所有y值,最後一個具有所有z值。所以,一種解決方案是創建x和y值的數組(例如meshgrid()
)。 。
這聽起來像你正試圖創建一個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
選擇更合理的數據。
您還可以使用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代碼,這是因爲在八度以上文檔中實現的第一示例相同。
感謝您的回答;)也許我有點愚蠢,但我真的不知道如何讓我的二維陣列在兩個二維數組和一個列表中:o – Fourier 2012-07-10 09:00:59
我已經爲你做了這個:'x,y =範圍(nx),範圍(ny)'將創建x和y值的一維列表,並且行X,Y = numpy.meshgrid(x,y)'將這些列表轉換爲2D NumPy數組(必須安裝NumPy爲Matplotlib工作,所以你已經在你的系統上有這個)。如果您有其他問題,也許您可以編輯您的問題以提供更多信息,例如,包括您試圖繪製的數據。 – Chris 2012-07-10 09:05:50
您的2D數組在上面的代碼中被簡單地稱爲'data',其大小被稱爲'nx','ny'。希望這可以讓你走。 – EOL 2012-07-10 09:07:20