我在一个项目中工作,我需要做一个立方体的顶视图和侧视图,但我不知道如何从顶部绘制代表视图的方块。这是多维数据集的代码:
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
from itertools import product, combinations, cycle
from numpy import sin, cos
from matplotlib.patches import Rectangle, Circle, PathPatch
import mpl_toolkits.mplot3d.art3d as art3d
fig = plt.figure()
ax = fig.gca(projection='3d')
ax.set_aspect("auto")
ax.set_autoscale_on(True)
#dibujar cubo
r = [-1, 1]
for s, e in combinations(np.array(list(product(r,r,r))), 2):
if np.sum(np.abs(s-e)) == r[1]-r[0]:
ax.plot3D(*zip(s,e), color="b")
#dibujar punto
ax.scatter([0],[0],[0],color="g",s=100)
#dibujar vector
from matplotlib.patches import FancyArrowPatch
from mpl_toolkits.mplot3d import proj3d
class Arrow3D(FancyArrowPatch):
def __init__(self, xs, ys, zs, *args, **kwargs):
FancyArrowPatch.__init__(self, (0,0), (0,0), *args, **kwargs)
self._verts3d = xs, ys, zs
def draw(self, renderer):
xs3d, ys3d, zs3d = self._verts3d
xs, ys, zs = proj3d.proj_transform(xs3d, ys3d, zs3d, renderer.M)
self.set_positions((xs[0],ys[0]),(xs[1],ys[1]))
FancyArrowPatch.draw(self, renderer)
#print "ingrese coordenada inicial: "
m=float(input("Ingrese valor de vector: "))
a = Arrow3D([0,0],[0,1],[0,0], mutation_scale=20, lw=1, arrowstyle="-|>", color="k")
b = Arrow3D([0,-1],[0,0],[0,0], mutation_scale=20, lw=1, arrowstyle="-|>", color="r")
c = Arrow3D([0,0],[0,0],[0,1], mutation_scale=20, lw=1, arrowstyle="-|>", color="b")
d = Arrow3D([0,0],[0,0],[0,-1], mutation_scale=20, lw=1, arrowstyle="-|>", color="g")
e = Arrow3D([0,m],[0,0],[0,0], mutation_scale=20, lw=1, arrowstyle="-|>", color="c")
f = Arrow3D([0,0],[0,-0.5],[0,0], mutation_scale=20, lw=1, arrowstyle="-|>", color="m")
ax.add_artist(a)
ax.add_artist(b)
ax.add_artist(c)
ax.add_artist(d)
ax.add_artist(e)
ax.add_artist(f)
a = [0, 0, 0]
b = [m, 0, 1]
orig = [0, 0, 0]
for (_b, _e), _c in zip([[orig, a], [orig, b], [a, b]], cycle(['m', 'r', 'g', 'b'])):
xs, ys, zs = zip(_b, _e)
res = Arrow3D(xs, ys, zs, mutation_scale=20, lw=1, arrowstyle="simple", color='y')
ax.add_artist(res)
plt.show()
那么,如何在子图中像方案图像那样进行立方体的俯视图?
答案 0 :(得分:0)
我认为解决方案可以像设置view_init()一样简单。
类似的东西:
ax.view_init(0,0)
在代码的最后,plt.show()
为我工作。
您可以使用高程设置z平面中的角度,然后设置x-y平面中的方位角。
来自docs:
view_init (elev = None,azim = None)设置高程和方位角 轴。
这可以用来以编程方式旋转轴。
'elev'存储z平面中的仰角。 'azim'存储了 x,y平面中的方位角。
如果elev或azim为None(默认值),则使用初始值 这是在Axes3D构造函数中指定的。