【问题标题】:Change arrow style of matplotlib quiver function更改 matplotlib quiver 函数的箭头样式
【发布时间】:2015-10-18 06:07:16
【问题描述】:

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

我尝试将 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()

类似问题:

【问题讨论】:

    标签: matplotlib


    【解决方案1】:

    注意:这只是部分答案,关于arrowprops=dict()的使用。


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

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

    你可以阅读更多关于这个箭头讨论here

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

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

    annotate 有类似的问题,您可能会看到 in this question

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-10
      • 2021-11-16
      • 2023-03-29
      • 2018-03-15
      • 1970-01-01
      • 2022-10-13
      • 2016-04-15
      相关资源
      最近更新 更多