如何解决Matplotlib 3D Quiver 绘制指向随机方向的单位向量的问题
你好,我想生成一个单位向量,它指向三维空间中的随机方向,但我需要 quiver 3d 的帮助,因为这段代码给了我 ValueError: need at least one array to concatenate
。谢谢!
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
np.random.seed(420)
campione = 10 # I want generate 10 vectors to plot
phi = 2*np.pi * np.random.random(size=campione)
theta = np.arccos(1 - 2*np.random.random(size=campione))
vett3D = np.array([ np.sin(theta)*np.cos(phi),np.sin(theta)*np.sin(phi),np.cos(theta) ])
origine = np.zeros((3,campione))
fig = plt.figure(num=None,figsize=(8,6),dpi=800,facecolor='w',edgecolor='k')
ax = fig.gca(projection='3d')
ax.quiver(origine,vett3D)
plt.show()
解决方法
以此为指导:https://matplotlib.org/stable/gallery/mplot3d/quiver3d.html
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(1)
campione = 10 # I want generate 10 vectors to plot
phi = np.pi * np.random.random(size=campione)
theta = 2 * np.pi * np.random.random(size=campione)
ax = plt.figure().add_subplot(projection='3d')
# Make the grid
points3d = np.random.uniform(low=-3,high=3,size=(campione,3)) #Each row is a point x,y,z
# # Make the direction data for the arrows
u = np.cos(theta) * np.sin(phi) #Using spherical coordinates
v = np.sin(theta) * np.sin(phi)
w = np.cos(phi)
ax.quiver(points3d[:,0],points3d[:,1],2],u,v,w,normalize=False)
ax.set_xlim(-4,4)
ax.set_ylim(-4,4)
ax.set_zlim(-5,5)
plt.show()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。