在绘图上绘制括号

时间:2016-02-10 16:19:48

标签: python matplotlib

如果我想在我的情节的某些部分画出括号,我将如何进行:

brackets over plot

目前我正在使用powerpoint添加它们,但我想完全在python中完成它。

感谢您的帮助

1 个答案:

答案 0 :(得分:15)

获得你想要的东西(或者非常接近它的东西)的一种方法是使用matplotlib的annotate函数,它允许你非常广泛地定制箭头函数(参见official tutorial)。下面是一个示例,其中包含一些组成的绘图数据,以显示如何根据您的标签要求使用它:

import matplotlib.pyplot as plt
import numpy as np

# Make some fake data and a sample plot
x = np.arange(1,100)
y = x**2 * 1.0e6
ax = plt.axes()
ax.plot(x,y)

# Adjust the fontsizes on tick labels for this plot
fs = 14.0
[t.set_fontsize(fs) for t in ax.xaxis.get_majorticklabels()]
[t.set_fontsize(fs) for t in ax.yaxis.get_majorticklabels()]
ax.yaxis.get_offset_text().set_fontsize(fs)

# Here is the label and arrow code of interest
ax.annotate('SDL', xy=(0.5, 0.90), xytext=(0.5, 1.00), xycoords='axes fraction', 
            fontsize=fs*1.5, ha='center', va='bottom',
            bbox=dict(boxstyle='square', fc='white'),
            arrowprops=dict(arrowstyle='-[, widthB=7.0, lengthB=1.5', lw=2.0))

enter image description here

annotate函数包含您需要的文本标签以及箭头(xy)和文本本身(xycoords)的定位参数以及一些常规定位和字体大小命令。

最感兴趣的是bboxarrowprops参数。 bbox参数在标签周围绘制一个带有白色背景的正方形。 arrowprops涉及更多 - arrowstyle键设置箭头(本例中为括号)以及头部的宽度和长度。请注意,这是arrowstyle下的所有字符串。最后,箭头的线宽略有增加。

您可能需要调整xyxytextwidthBlengthB和箭头lw才能获得所需的一切。

有一点不清楚(或者至少在我发现这一点时不适合我)是当annotate包含arrowstyle参数时,matplotlib使用FancyArrowPatch properties,但是当arrowstyle丢失时,它会使用YAArrow propertiesannotate的文档中明显提到了更多细节(以及这种区别)。