我正在尝试使用matplotlib绘制指向python曲线上某个点的箭头。
在这一行,我需要在特定点指向垂直箭头。 这用于指示作用在梁上的力,因此它们的方向非常重要。曲线是光束,箭头是力。
我确切地知道了所述点的坐标,但它是由输入改变的原因。 此输入还应指示箭头是否从线向上或向下指向。 (施加负面和正面力量)。 我已经无休止地尝试了plt.arrow,但是因为比例变化很大,箭头所必需的象限也是如此。所以它可能必须从y< 0并且以y> 1的点结束0。 问题是箭头长度然后指向错误的方式 - <。而不是 - >。
因此,在我秃顶之前,我想知道是否有一种简单的方法可以应用垂直箭头(对于所有我关心的方向可能是无限的)指向曲线上的一个点,我可以控制它是指向曲线还是向下指向曲线。
答案 0 :(得分:3)
我不确定我是否完全关注您,但我的方法是使用annotate
而不是arrow
(只需将文本字段留空)。您可以在数据坐标中指定箭头的一端,在偏移像素中指定另一端:但您必须将力(指示箭头的长度)映射到像素数。例如:
import matplotlib.pyplot as plt
import numpy as np
# Trial function for adding vertical arrows to
def f(x):
return np.sin(2*x)
x = np.linspace(0,10,1000)
y = f(x)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(x,y, 'k', lw=2)
ax.set_ylim(-3,3)
def add_force(F, x1):
"""Add a vertical force arrow F pixels long at x1 (in data coordinates)."""
ax.annotate('', xy=(x1, f(x1)), xytext=(0, F), textcoords='offset points',
arrowprops=dict(arrowstyle='<|-', color='r'))
add_force(60, 4.5)
add_force(-45, 6.5)
plt.show()
答案 1 :(得分:0)
倒箭头是由head_length变量的负号引起的。可能你正在使用负值来缩放它。使用head_length = abs(value)* somethingelse可以解决你的问题。