我目前正在Matplotlib中做一些“花哨”的注释:
import matplotlib.pyplot as plt
ax = plt.subplot(111)
plt.axis('equal')
src_pos, dst_pos = (0, 0), (1, 1)
src_patch = plt.Rectangle(src_pos, .25, .25, color='r')
ax.add_patch(src_patch)
dst_patch = plt.Circle(dst_pos, .25, color='b')
ax.add_patch(dst_patch)
arrowprops = dict(
arrowstyle='<-',
connectionstyle='arc3,rad=0.3',
patchA=dst_patch,
patchB=src_patch,
shrinkA=1,
shrinkB=1)
ant = ax.annotate('', src_pos, dst_pos, arrowprops=arrowprops)
plt.draw()
plt.show()现在,我想在箭头旁边添加一些文本。输出应该如下所示:

我对一种通用的解决方案感兴趣,在这种解决方案中,文本位置是以编程方式根据渲染器选择箭头路径来选择的。例如,
src_pos和dst_pos的未知值,文本应该适当放置。arrowprops是如何设置的,以及使用的是哪个connectionstyle,文本都应该适当放置。plt.draw()。谢谢!
发布于 2013-12-05 00:40:15
只是看看intro.html页面。如果你知道坐标的话,文本似乎可以独立于箭头放置。在draw()命令之前添加以下内容:
ant2 = ax.annotate('this is\nthe text\ni want\nto add', xy=(0.1, 0.8), xytext=(0.1, 0.8), horizontalalignment='left', verticalalignment='top')就广义解决方案而言,它将与原始注释一样复杂,因为根据给注释的参数创建了相当多的不同类型的东西。例如,如果没有指定arrowstyle,则创建一个YAArow修补程序实例。您可以调用YAArow的get_path(),但是路径的用处有限,因为它或多或少只是一个点的集合。您需要编写一个"find_middle_of_path()“,它需要考虑到路径不一定是连续的,有时路径的所有属性都不是由使用它的方法填充的,例如箭头路径何时是不连续的,当箭头路径的中间被图形的边缘所剪裁时。
如果指定了arrowstyle,则创建一个FancyArrowPatch实例。如果创建了一个FancyArrowPatch,您可以调用get_path_in_displaycoord()来获得与YAArow修补程序路径相同的警告。
您最好创建一些相当简单的例程,这些例程调用注释两次,一个用于箭头,另一个用于与您真正想要使用注释的可能有限的方式相对应的文本。
发布于 2013-12-06 07:22:36
还有一个选项text()可以将任何文本添加到已知位置的情节中。查看此链接以获得额外的选项。
ant1 = ax.text(0.4, 0.6, 'text')这不会在arrowprops上显示
https://stackoverflow.com/questions/20318867
复制相似问题