
在 matplotlib 3d 图中将箭头放在矢量上
在绘制 3d 数据的特征向量时,我们希望在这些向量上放置箭头。为了实现这一目标,我们可以使用一个名为 arrow3d 的自定义箭头补丁类,该类扩展了 matplotlib 的 fancyarrowpatch。
arrow3d 类覆盖了 fancyarrowpatch 中的 posa 和 posb 属性,并将这些属性投影到 2d 以在 3d 图中绘制箭头。
步骤:
从 3d 坐标创建 arrow3d 对象。使用 proj3d 模块将 3d 坐标投影到 2d。将投影的 2d 坐标分配给 posa 和 posb 属性。
示例:
我们修改了原始示例代码,添加了 arrow3d 箭头艺术家:
import numpy as npfrom mpl_toolkits.mplot3d import Axes3Dfrom matplotlib.patches import FancyArrowPatchfrom mpl_toolkits.mplot3d import proj3dclass 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)samples, eig_vec = ... # 样本数据和特征向量计算fig = plt.figure(...)ax = fig.add_subplot(111, projection='3d')... # 绘制散点和球心for v in eig_vec: a = Arrow3D([mean_x, v[0]], [mean_y, v[1]], [mean_z, v[2]], mutation_scale=20, lw=3, arrowstyle="-|>", color="r") ax.add_artist(a)
输出:
在 3d 散点图上,每个特征向量现在都绘制有一个指向其方向的箭头。
以上就是如何在 Matplotlib 3D 图中为矢量添加箭头?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1352508.html
微信扫一扫
支付宝扫一扫