我用pyplot.arrow
画了一些直箭头,例如,
import matplotlib.pyplot as plt
import numpy as np
v={}
for i in range (1,4):
v[i]=np.array([np.cos(-2*np.pi/3*i),np.sin(-2*np.pi/3*i)])
plt.arrow(.85*(.05*v[2]+.95*v[1])[0],.85*(.05*v[2]+.95*v[1])[1],.85*.9*(v[2]-v[1])[0],.85*.9*(v[2]-v[1])[1],width=0,head_width=.03,head_length=.045,length_includes_head=True,color="black")
plt.arrow(.85*(.05*v[3]+.95*v[2])[0],.85*(.05*v[3]+.95*v[2])[1],.85*.9*(v[3]-v[2])[0],.85*.9*(v[3]-v[2])[1],width=0,head_width=.03,head_length=.045,length_includes_head=True,color="black")
plt.arrow(.85*(.05*v[1]+.95*v[3])[0],.85*(.05*v[1]+.95*v[3])[1],.85*.9*(v[1]-v[3])[0],.85*.9*(v[1]-v[3])[1],width=0,head_width=.03,head_length=.045,length_includes_head=True,color="black")
plt.axes().set_xlim(-.5,1)
plt.axes().set_ylim(-np.sqrt(3)/2,np.sqrt(3)/2)
plt.axes().set_aspect(1)
plt.show()
现在我也想画一些有圆形曲率的箭头,而不是直的,我看到我可以用pyplot.annotate()
或patches.FancyArrowPatch
和connectionstyle="arc3,rad=.5"
左右来实现这一点。
但是这些箭头看起来与pyplot.arrow
s完全不同,并且与我的其他图形不匹配。我不知道如何将connectionstyle
传递给pyplot.arrow
。有没有一种方法可以绘制出与pyplot.arrow
完全相同的弯曲箭头?
2条答案
按热度按时间0s7z1bwu1#
你不能用
pyplot.arrow
绘制弯曲的箭头。但是,patches.FancyArrowPatch
应该提供所有的选项来获得你想要的任何箭头样式,所以我们的想法是对直箭头也使用FancyArrowPatch
,这样你就可以对所有箭头使用相同的样式。ff29svar2#
这是我最终使用的;它有点黑客,只是在
Arc
的两端绘制直的arrow
头:函数名为
circarrow
,作为参数,您可以传递直径、中心的两个坐标、圆弧起始的Angular 和圆弧应该经过的总Angular ,以及传递给pyplotarrow
的任何参数。要在圆弧的起始处绘制箭头,您可以指定startarrow=True
,而endarrow=True
将在弧的末端启用箭头。下面是一个示例图像,您还可以看到箭头样式与直箭头一致:
example image