matplotlib 是否基于图形单位而不是轴数据单位设置箭头大小?

js4nwp54  于 2023-01-09  发布在  其他
关注(0)|答案(1)|浏览(144)

在matplotlib中,有没有办法以图形单位而不是数据单位来指定箭头的大小?
使用情形为:我正在制作一个多面板图形,其中每个面板都有不同的轴大小(例如,一个面板在X轴上从0到1,另一个面板从0到10)。我希望每个面板中的箭头都相同。我还希望箭头无论方向如何都相同。
对于纵横比不等于1的轴,尾部的宽度(因此头部的大小)随方向而变化。
我最接近的是,在画布上画完之后:

dx = ax.get_xlim()[1] - ax.get_xlim()[0]
for arrow in ax.patches:
arrow.set_data(width=dx/50)

但这不起作用;结果是这样的:

0yg35tkg

0yg35tkg1#

只需使用ax.annotate()代替ax.arrow()
第一节第一节第一节第一节第一次

import matplotlib.pyplot as plt
import numpy as np

xlim, ylim = (-.3, .8), (0, 5.8)
arrow_start, arrow_end = np.asarray([.1, 3]), np.asarray([.5, 5])

fig = plt.figure(figsize=(3, 2))

ax = plt.gca()
ax.set_title('using ax.arrow()')
ax.set_xlim(xlim)
ax.set_ylim(ylim)
ax.arrow(*arrow_start, *(arrow_end - arrow_start), width=1/50)

fig = plt.figure(figsize=(3, 2))

ax = plt.gca()
ax.set_title('using ax.annotate()')
ax.set_xlim(xlim)
ax.set_ylim(ylim)
ax.annotate('', arrow_end, arrow_start, arrowprops=dict(width=5, headwidth=10, headlength=5))

相关问题