更改 matplotlib quiver 函数的箭头样式

tob*_*n9e 5 matplotlib

有没有办法改变matplotlib quiver 函数的箭头样式?

我尝试将arrowprops=dict()kwarg传递给函数,但这似乎只适用于annotate function

无论如何,我正在寻找的箭头样式似乎没有包含在 matplotlib 中。我认为它们被称为“半箭”。我可以使用 UTF-8 字符插入这些箭头,但是无法自定义这些箭头,并且很难将它们正确对齐。有没有更好的方法来做到这一点(也许插入一个 SVG 符号)?

在此处输入图片说明

我上面的解决方案的代码:

import matplotlib.pyplot as plt
import numpy as np
import mplstereonet
import matplotlib.image as image

#UTF-8 characters don't seem to work in the normal pyplot backend
plt.switch_backend("gtk3cairo")

fig = plt.figure()
ax = fig.add_subplot(111, projection='stereonet')

arrows = [[120, 30, 120, 30, "sin"],
          [160, 50, 160, 50, "dex"]]

for arrow in arrows:
    strike = arrow[0] - 90
    ax.plane(strike, arrow[1], color="#000000")
    ax.line(arrow[3], arrow[2], color="#ff0000")

    x, y = mplstereonet.line(arrow[3], arrow[2])
    ang = np.degrees(np.arctan2(x, y))[0] * (-1)
    gap = 0.08
    gap_x = gap * np.sin(ang)
    gap_y = gap * np.cos(ang)

    if arrow[4] == "dex":
        ax.text(x - gap_x, y - gap_y, "?", size=30, rotation=ang,
                horizontalalignment="center", verticalalignment="center")
        ax.text(x + gap_x, y + gap_y, "?", size=30, rotation=ang,
                horizontalalignment="center", verticalalignment="center")

    elif arrow[4] == "sin":
        ax.text(x - gap_x, y - gap_y, "?", size=30, rotation=ang,
                horizontalalignment="center", verticalalignment="center")
        ax.text(x + gap_x, y + gap_y, "?", size=30, rotation=ang,
                horizontalalignment="center", verticalalignment="center")

plt.show()
Run Code Online (Sandbox Code Playgroud)

类似问题:

Lui*_*uis 2

注意:这只是关于arrowprops=dict().


部分问题在于,有 7 个(!)艺术家可用于绘制箭头(Arrow、FancyArrow、FancyArrowPatch、ConnectionPatch、YAArrow、SimpleArrow(FancyArrowPatch 的子类)和 FilledArrow),所有这些艺术家的行为都不同并且有不同的接口。

这不包括绘制箭头的箭袋,但它是 PolyCollection 子类。

您可以在此处阅读有关此箭头讨论的更多信息。

还提到一些函数根据给定的参数自动更改箭头样式:

[...]注释函数的问题是,当指定不同的箭头样式时,API 的变化对于用户来说并不明显。

我有一个类似的问题annotate,你可能会在这个问题中看到。