сюжет плоская поверхность с матплотлибом в 3d - PullRequest
0 голосов
/ 14 января 2020

Я пытаюсь нарисовать заполненную поверхность (квадрат) в matplotlib в трехмерной среде. буквально лицо куба. Но мне трудно со значениями для координат z. как нарисовать квадрат перпендикулярно осям? Я пытаюсь использовать plot_surface. вот код, который у меня есть:

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.gca(projection='3d')

X = list(np.linspace(-4, 4, 100))
Y = list(np.linspace(-4, 4, 100))
X, Y = np.meshgrid(X, Y)
Z = np.sin((X**2 + Y**2)/4)
ax.plot_surface(X, Y, Z, rstride=8, cstride=8, alpha=0.3)

ax.set_xlabel('X')
# ax.set_xlim(-40, 40)
ax.set_ylabel('Y')
# ax.set_ylim(-40, 40)
ax.set_zlabel('Z')
# ax.set_zlim(-100, 100)

plt.show()

Обновление: я строю квадрат в трехмерной среде, но это каркас, но я не могу его заполнить. можно выставить imshow на площади? Я просто хочу иметь возможность рисовать квадрат в любой позиции (x, y, z).

import matplotlib.pyplot as plt
import numpy as np
from itertools import product, combinations


fig = plt.figure()
ax = fig.gca(projection='3d')
# ax.set_aspect("equal")

# draw cube
x = [-1, 1]
y = [ 1, 1]
z = [-1, 1]
for s, e in combinations(np.array(list(product(x, y, z))), 2):
    if np.sum(np.abs(s-e)) == x[1]-x[0]:
        ax.plot3D(*zip(s, e), color="b")

ax.set_xlabel('X')
# ax.set_xlim(-40, 40)
ax.set_ylabel('Y')
# ax.set_ylim(-40, 40)
ax.set_zlabel('Z')
# ax.set_zlim(-100, 100)
plt.show()

1 Ответ

0 голосов
/ 15 января 2020

, следуя примеру в этом вопросе стека :

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

# create a 2 x 2 vertex mesh
xx, yy = np.meshgrid(np.linspace(0,1,2), np.linspace(0,1,2))
xx2, yy2 = np.meshgrid(np.linspace(2,3,2), np.linspace(2,3,2))

# create vertices for a rotated mesh (3D rotation matrix)
X =  xx
Y =  1*np.ones(X.shape)
Z =  yy

# create some dummy data (0 x 2) for the image
data = 1*np.ones(X.shape)

# create the figure
fig = plt.figure()

# show the 3D rotated projection
ax2 = fig.add_subplot(111, projection='3d')
ax2.plot_surface(X, Y, Z, rstride=1, cstride=1, facecolors=plt.cm.BrBG(data), shade=False)
ax2.plot_surface(xx2, Y, yy2, rstride=1, cstride=1, shade=False)

ax2.set_xlabel('X')
# ax.set_xlim(-40, 40)
ax2.set_ylabel('Y')
# ax.set_ylim(-40, 40)
ax2.set_zlabel('Z')
# ax.set_zlim(-100, 100)
plt.show()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...