设置绘制箭头时的虚线长度
使用matplotlib库,我们可以很简单地绘制带有自定义虚线样式的线条,方法是使用
plt.plot([0, 5], [0, 5], dashes=(20.0, 20.0))
plt.show()
或者
lines = plt.plot([0, 5], [0, 5])
lines[0].set_dashes((20.0, 20.0))
plt.show()
虽然我们可以用虚线样式来绘制箭头
plt.arrow(0, 0, 5, 5, linestyle='dashed')
plt.show()
但我似乎找不到方法来绘制带有自定义虚线样式的箭头
arrow = plt.arrow(0, 0, 5, 5)
?
plt.show()
因为使用plot函数的dashes
参数会导致
AttributeError: 'FancyArrow' object has no attribute 'set_dashes'
而且错误信息提到返回的FancyArrow
没有set_dashes()
这个方法。这样做有可能吗?
2 个回答
3
你可以传递一个(偏移量,线条样式),
其中线条样式是一个包含开和关墨水点的偶数长度元组。
具体可以参考 set_linestyle。
举个例子,ax.arrow(0, 0, 3, 3, linestyle=(5, (3,6)))
这个代码会画出一条虚线箭头,其中“开”的部分的长度是“关”的部分的两倍;而 ax.arrow(0, 0, 3, 3, linestyle=(5, (3,9)))
则是“开”的部分的长度是“关”的部分的三倍。
另外,offset
这个参数在设置箭头的 linestyle
时似乎没有什么效果,至少在我使用的 3.0.3 版本的 matplotlib
中是这样的。
2
目前,我觉得这是不可能的,因为 Arrow
类只支持四种线条样式:'solid' | 'dashed' | 'dashdot' | 'dotted'
。如果想使用自定义的虚线样式,那个对象必须有一个叫 ._dashSeq
的属性,而 Arrow
是没有这个属性的。所以我能理解为什么会有 .set_dashes
这个方法。
不过,虽然现在 Arrow
提供了 .set_linestyle
方法,但你不能设置成其他任何样式,除了上面提到的四种。这就意味着像 .set_linestyle('-')
这样的设置是不可行的。