我对使用 matplotlib 还很陌生,找不到任何显示两条线并绘制它们之间的角度的示例。
这是我现在的形象:
这是我想要实现的一个例子:
我通常会查看 Matplotlib 画廊 以了解如何执行某些任务,但似乎没有任何相似之处。
原文由 Michael Aquilina 发布,翻译遵循 CC BY-SA 4.0 许可协议
我对使用 matplotlib 还很陌生,找不到任何显示两条线并绘制它们之间的角度的示例。
这是我现在的形象:
这是我想要实现的一个例子:
我通常会查看 Matplotlib 画廊 以了解如何执行某些任务,但似乎没有任何相似之处。
原文由 Michael Aquilina 发布,翻译遵循 CC BY-SA 4.0 许可协议
我一直在寻找更多的一体化解决方案,并找到了 AngleAnnotation 类。我强烈推荐它。
用圆弧标记线之间或内部形状之间的角度通常很有用。虽然 Matplotlib 提供了 Arc,但直接将其用于此类目的时存在一个固有问题,即在数据空间中为圆形的弧在显示空间中不一定为圆形。此外,圆弧的半径通常最好在独立于实际数据坐标的坐标系中定义 - 至少如果您希望能够自由放大绘图而不需要注释增长到无穷大。
你可以在这里找到它 https://matplotlib.org/stable/gallery/text_labels_and_annotations/angle_annotation.html 我在我的工作目录中将它保存为 AngleAnnotation.py(当然你可以用不同的名称)并将它导入我的代码中
from AngleAnnotation import AngleAnnotation
这是我如何使用它的片段:
...
#intersection of the two lines
center = (0.0,0.0)
#any point (other than center) on one line
p1 = (6,2)
# any point (other than center) on the other line
p2 = (6,0)
# you may need to switch around p1 and p2 if the arc is drawn enclosing the lines instead
# of between
# ax0 is the axes in which your lines exist
# size sets how large the arc will be
# text sets the label for your angle while textposition lets you rougly set where the label is, here "inside"
# you can pass kwargs to the textlabel using text_kw=dict(...)
# especially useful is the xytext argument which lets you customize the relative position of your label more precisely
am1 = AngleAnnotation(center, p1, p2, ax=ax0, size=130, text="some_label", textposition = "inside", text_kw=dict(fontsize=20, xytext = (10,-5)))
您可以在上面的链接中找到更多详细信息。它现在在 matplotlib 3.4.2 上为我工作。
原文由 WiseKouichi 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答5.3k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
4 回答1.6k 阅读✓ 已解决
3 回答1.4k 阅读✓ 已解决
3 回答1.4k 阅读✓ 已解决
2 回答968 阅读✓ 已解决
1 回答1.8k 阅读✓ 已解决
您可以使用
matplotlib.patches.Arc
绘制相应角度测量的弧。要绘制角弧:
定义一个函数,它可以接受 2 个
matplotlib.lines.Line2D
对象,计算角度并返回一个matplotlib.patches.Arc
对象,您可以将其与线条一起添加到绘图中。要打印角度值:
如果您希望内联显示角度值,请参阅 此 SO 问题以了解如何在 matplotlib 中打印内联标签。请注意,您必须打印弧的标签。
我做了一个小函数,它提取弧的顶点并尝试计算角度文本的坐标。
这可能不是最佳的,并且可能不适用于所有角度值。
或者您始终可以手动预先计算标签点并使用
text
来显示角度值。您可以使用get_label()
label
Arc
因为我们已经将值角度设置为 unicode 度数 +象征)。上述功能的示例用法:
如果您不关心角度文本的内联放置。您可以使用
plt.legend()
打印角度值。最后 :
offset
函数中的参数get_angle_plot
用于指定圆弧的伪半径值。当角弧可能相互重叠时,这将很有用。
(在这个图中,就像我说的,我的
get_angle_text
函数在放置文本值方面不是很理想,但应该让您了解如何计算点)添加第三行: