用Python绘制第四维度

2024-09-28 23:16:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道是否有可能使用python绘制四维图。特别是我想要一个三维网格X,Y,Z和f(X,Y,Z)=1f(X,Y,Z)=0。 所以我需要一个符号(例如“o”或“x”)来表示某个特定点(x,Y,Z)。 我不需要色阶。在

注意,我有100个由1或0组成的矩阵(512*512):所以我的网格应该是512*512*100。在

我希望我已经清楚了!谢谢。在

编辑: 这是我的代码:

X = np.arange(W.shape[2])
Y = np.arange(W.shape[1])
Z = np.arange(W.shape[0])
X, Y, Z = np.meshgrid(X, Y, Z)
fig = plt.figure()
ax = fig.gca(projection='3d')
for z in range(W.shape[0]):
    indexes = np.where(W[z])
    ax.scatter(X[indexes], Y[indexes], ???, marker='.')

ax.set_xlabel('X = columns')
ax.set_ylabel('Y = rows')
ax.set_zlabel('Z')
plt.show()

W是我的三维矩阵,所以:W[0],W[1],等等都是512x512矩阵。 我的问题是:我还有什么可写的???在我的代码里。我知道我不该问这个,但我不明白这个意思。在


Tags: 代码网格编辑npfig绘制符号plt
1条回答
网友
1楼 · 发布于 2024-09-28 23:16:21

您可以为z层创建检查f(x,y,z)的值,看看它们是否为非零,然后基于此散布函数。在

例如,对于nz层的(n,n)矩阵,每个层都是一个球体的切片:

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

n, nz = 48, 24
x, y = np.linspace(-n//2,n//2-1,n), np.linspace(-n//2,n//2-1,n)
X, Y = np.meshgrid(x, y)

def f(x,y,z):
    return (X**2 + Y**2 + (z-nz//2)**2) < (n*0.2)**2

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

for z in range(nz):
    layer = f(X, Y, z)
    indexes = np.where(layer)
    ax.scatter(X[indexes], Y[indexes], layer[indexes]*(z-nz//2), marker='.')

ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')

plt.show()

enter image description here

对于f(x,y,z)的随机非零元素:

^{pr2}$

enter image description here

但是对于大数组,您可能会遇到以下问题:(a)内存和绘图速度;(b)无法解决绘图的“中心”块中的细节。在

相关问题 更多 >