箭头指向曲线上的点

时间:2015-04-26 18:40:44

标签: python matplotlib plot

我正在尝试使用matplotlib绘制指向python曲线上某个点的箭头。

在这一行,我需要在特定点指向垂直箭头。 这用于指示作用在梁上的力,因此它们的方向非常重要。曲线是光束,箭头是力。

我确切地知道了所述点的坐标,但它是由输入改变的原因。 此输入还应指示箭头是否从线向上或向下指向。 (施加负面和正面力量)。 我已经无休止地尝试了plt.arrow,但是因为比例变化很大,箭头所必需的象限也是如此。所以它可能必须从y< 0并且以y> 1的点结束0。 问题是箭头长度然后指向错误的方式 - <。而不是 - >。

因此,在我秃顶之前,我想知道是否有一种简单的方法可以应用垂直箭头(对于所有我关心的方向可能是无限的)指向曲线上的一个点,我可以控制它是指向曲线还是向下指向曲线。

2 个答案:

答案 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()

enter image description here

答案 1 :(得分:0)

倒箭头是由head_length变量的负号引起的。可能你正在使用负值来缩放它。使用head_length = abs(value)* somethingelse可以解决你的问题。