首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Matplotlib注释注释

用Matplotlib注释注释
EN

Stack Overflow用户
提问于 2013-12-02 00:05:37
回答 2查看 2.6K关注 0票数 9

我目前正在Matplotlib中做一些“花哨”的注释:

代码语言:javascript
复制
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_posdst_pos的未知值,文本应该适当放置。
  • 无论arrowprops是如何设置的,以及使用的是哪个connectionstyle,文本都应该适当放置。
  • 在脚本结束之前,我更希望不必调用plt.draw()

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2013-12-05 00:40:15

只是看看intro.html页面。如果你知道坐标的话,文本似乎可以独立于箭头放置。在draw()命令之前添加以下内容:

代码语言:javascript
复制
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修补程序路径相同的警告。

您最好创建一些相当简单的例程,这些例程调用注释两次,一个用于箭头,另一个用于与您真正想要使用注释的可能有限的方式相对应的文本。

票数 2
EN

Stack Overflow用户

发布于 2013-12-06 07:22:36

还有一个选项text()可以将任何文本添加到已知位置的情节中。查看此链接以获得额外的选项。

代码语言:javascript
复制
ant1 = ax.text(0.4, 0.6, 'text')

这不会在arrowprops上显示

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20318867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档