matplotlib - 用 matplotlib 在 3d 中绘制平面
问题描述
我正在尝试在 3d 环境中的 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()
更新:我在 3d 环境中绘制一个正方形,但它是一个线框,但我无法填充它。是否可以将 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()
解决方案
按照这个堆栈问题的例子:
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()
推荐阅读
- java - JPA 映射 - 我可以建立“复合”关系吗?
- javascript - 如何在不同的测试组中测试我的 API 调用?
- sql - 从 PostgreSQL 中的“SELECT ALL”查询中获取空行
- python - 如何将活动用户传递给 Django ModelForms
- c#-9.0 - 警告 CS7022 - 程序的入口点是全局代码;忽略 'Program.Main(string[])' 入口点
- javascript - 如何在 JavaScript 中分离复杂字符串中的子字符串?
- python - 如何将行转换为列python
- python - TypeError:不能从 [datetime64[ns]] 到 [timedelta64[D]] 键入 datetimelike
- r - 我想在 R 中找到行位置
- python - discord.py 中的打字机