曲线上的点有一个指向它的箭头

3
我正在尝试使用matplotlib在python中绘制箭头指向曲线上的某一点。
在这行代码上,我需要在特定点处指向垂直箭头。 这是为了指示作用于梁上的力,因此它们的方向非常重要。 其中曲线是梁,箭头是力。
我知道该点的坐标,但它当然会随着输入而改变。 此输入还应决定箭头是朝上还是朝下指向线。 (应用正负力)。 我已经尝试了无数次plt.arrow,但由于比例发生了巨大变化,箭头必须位于的象限也发生了变化。 因此,它可能必须从y <0开始,并以y> 0的点结束。 问题是箭头长度的箭头会指向错误的方向,如此--<。 而不是-->。
所以在我因此变秃之前,我想知道是否有一种简单的方法可以应用垂直箭头(可以对我来说在相反方向上是无限的),指向曲线上的某一点,我可以控制它是否指向曲线向上或向下。

1
matplotlib,而不是matlibplot。 - cphlewis
2个回答

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


0

箭头倒置是由于head_length变量的负号。可能您正在使用负值进行缩放。使用head_length = abs(value)* somethingelse应该可以解决您的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接