簡體   English   中英

使用mplot3d繪制2d數組

[英]Plotting a 2d Array with mplot3d

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

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

我該怎么做?

聽起來你正在嘗試創建一個曲面圖(或者你可以繪制一個線框圖或一個填充的countour圖

根據問題中的信息,您可以嘗試以下方面的內容:

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更合理的數據才能獲得合理的表面。

你可以在Matplotlib畫廊的一個例子中找到答案; 3D示例即將結束。

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

我看到的示例基本上使用了三個 2D數組:一個包含所有x值,一個包含所有y值,最后一個包含所有z值。 因此,一種解決方案是創建x和y值的數組meshgrid()例如,使用meshgrid() )。

你也可以使用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代碼,與上面文檔中以八度音程實現的第一個示例相同。

您可以使用功能bar3d嘗試3D條形圖。

假設你有一個維數(25,10)的數組A,索引(i,j)的值是A [i] [j]。 以下代碼示例可以為您提供3D條形圖,其中每個條形的高度為A [i] [j]。

from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline

np.random.seed(1234)
fig = plt.figure()
ax1 = fig.add_subplot(111, projection='3d')
A = np.random.randint(5, size=(25, 10))

x = np.array([[i] * 10 for i in range(25)]).ravel() # x coordinates of each bar
y = np.array([i for i in range(10)] * 25) # y coordinates of each bar
z = np.zeros(25*10) # z coordinates of each bar
dx = np.ones(25*10) # length along x-axis of each bar
dy = np.ones(25*10) # length along y-axis of each bar
dz = A.ravel() # length along z-axis of each bar (height)

ax1.bar3d(x, y, z, dx, dy, dz)

在我的PC上隨機種子1234,我得到以下情節: 在此輸入圖像描述

但是,使用dimension(256,1024)制作問題的繪圖可能會很慢。

暫無
暫無

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

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