You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Matplotlib 3D Quiver箭头改为锥形并缩小尺寸?

解决方案

要实现锥形箭头并缩小箭头尺寸,你可以通过调整matplotlib中3D箭图(quiver)的几个关键参数来完成,以下是修改后的代码和说明:

import numpy as np
import matplotlib.pyplot as plt as pl

# 生成单位球体网格
u, v = np.mgrid[0:2*np.pi:20j, 0:np.pi:10j]
x = np.cos(u)*np.sin(v)
y = np.sin(u)*np.sin(v)
z = np.cos(v)

fig = pl.figure(figsize=(20,15))
ax = fig.gca(projection='3d')

# 可选:如果需要固定箭头长度(比如0.5个单位,适配单位球体),先归一化向量
mag = np.sqrt(blocx[0]**2 + blocy[0]**2 + blocz[0]**2)
dx = blocx[0] / mag * 0.5
dy = blocy[0] / mag * 0.5
dz = blocz[0] / mag * 0.5

# 修改后的箭图参数
ax.quiver(0, 0, 0, dx, dy, dz, color="b", 
          linewidth=2,       # 缩小箭杆宽度
          length=1,          # 箭头长度(配合归一化后的向量,总长度为0.5)
          arrow_length_ratio=0.2,  # 箭头头部占总长度的比例(更小的值让头部更紧凑)
          headwidth=3)       # 箭头头部宽度(相对于箭杆,值越大锥形越明显)

ax.plot_wireframe(x, y, z, color='#15B05E')
ax.view_init(30, 70)
pl.show()

参数说明:

  • linewidth: 从原来的5改为2,缩小箭杆的粗细,让整体尺寸更协调。
  • 向量归一化: 如果你的原始向量长度超过1(会超出单位球体),先归一化再乘以目标长度(比如0.5),确保箭头完全在球体内。
  • arrow_length_ratio: 设置箭头头部占总箭头长度的比例(默认0.3),调整为0.2可以让锥形头部更紧凑。
  • headwidth: 控制箭头头部相对于箭杆的宽度(默认3),这个参数直接影响锥形的视觉效果,值越大头部越宽,锥形越明显。

如果不需要固定箭头长度,也可以直接用原始向量并调整length参数来缩放,比如:

ax.quiver(0, 0, 0, blocx[0], blocy[0], blocz[0], color="b", 
          linewidth=2, length=0.5, arrow_length_ratio=0.2, headwidth=3)

这里的length=0.5会将原始向量缩小到原来的50%。

内容的提问来源于stack exchange,提问作者Jose Antonio Valderrama

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 20:47:30