有没有办法改变
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()
类似的问题:
> How to use custom marker with plot?
> Matplotlib custom marker/symbol
最佳答案 注意:这只是关于使用arrowprops = dict()的部分答案.
Part of the problem as that there are 7 (!) artists that can be used to draw arrows (Arrow, FancyArrow, FancyArrowPatch, ConnectionPatch, YAArrow, SimpleArrow (which is a sub-class of FancyArrowPatch) and FilledArrow) all of which behave differently and have different interfaces.
This does not include quiver which does draw arrows, but is a PolyCollection sub-class.
您可以在此箭头讨论here上阅读更多内容.
还提到有些函数根据给出的参数自动改变箭头样式:
[…] the issue with the annotate function is that it’s not obvious to a user that the API changes when specifying a different arrowstyle.
我有一个类似annotate的问题,你可能会看到in this question.