指向曲线上一点的箭头
Arrow pointing to a point on a curve
我正在尝试使用 matplotlib 在 python 中绘制指向曲线上某个点的箭头。
在这条线上,我需要将垂直箭头指向特定点。
这是为了指示作用在梁上的力,因此它们的方向非常重要。其中曲线是梁,箭头是力。
我确切地知道所述点的坐标,但它是随着输入而变化的。
此输入还应指示箭头是从直线向上还是向下。 (施加的负力和正力)。
我用 plt.arrow 进行了无休止的尝试,但是因为比例发生了巨大变化,箭头所在的象限也发生了巨大变化。所以它可能必须从 y < 0 开始并在 y > 0 的点结束。
问题是箭头长度会像这样指向错误的方向 --<。而不是-->。
所以在我因此秃顶之前,我想知道是否有一种简单的方法可以应用垂直箭头(我所关心的相反方向可能是无限的)指向曲线上的一个点,其中我可以控制它是向上指向曲线,还是向下指向曲线。
我不确定我是否完全理解您的意思,但我的方法是使用 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()
倒箭头是由于 head_length 变量的负号。可能您正在使用负值缩放它。使用 head_length= abs(value)*somethingelse 应该可以解决您的问题。
我正在尝试使用 matplotlib 在 python 中绘制指向曲线上某个点的箭头。
在这条线上,我需要将垂直箭头指向特定点。 这是为了指示作用在梁上的力,因此它们的方向非常重要。其中曲线是梁,箭头是力。
我确切地知道所述点的坐标,但它是随着输入而变化的。 此输入还应指示箭头是从直线向上还是向下。 (施加的负力和正力)。 我用 plt.arrow 进行了无休止的尝试,但是因为比例发生了巨大变化,箭头所在的象限也发生了巨大变化。所以它可能必须从 y < 0 开始并在 y > 0 的点结束。 问题是箭头长度会像这样指向错误的方向 --<。而不是-->。
所以在我因此秃顶之前,我想知道是否有一种简单的方法可以应用垂直箭头(我所关心的相反方向可能是无限的)指向曲线上的一个点,其中我可以控制它是向上指向曲线,还是向下指向曲线。
我不确定我是否完全理解您的意思,但我的方法是使用 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()
倒箭头是由于 head_length 变量的负号。可能您正在使用负值缩放它。使用 head_length= abs(value)*somethingelse 应该可以解决您的问题。