Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Matplotlib中的记号标签周围绘制框_Python_Matplotlib_Plot - Fatal编程技术网

Python 在Matplotlib中的记号标签周围绘制框

Python 在Matplotlib中的记号标签周围绘制框,python,matplotlib,plot,Python,Matplotlib,Plot,我有一个Matplotlib图,其中包含多个子图: 我想在其中一个标签周围画一个红色小框,如下所示: 如何在Matplotlib中(可靠且可重复地)执行此操作?最简单的情况:静态绘图 对于静态绘图,它很简单: import matplotlib.pyplot as plt fig, ax = plt.subplots() ax.axis([0, 2000, 0, 2e-9]) label = ax.xaxis.get_ticklabels()[-1] label.set_bbox(dic

我有一个Matplotlib图,其中包含多个子图:

我想在其中一个标签周围画一个红色小框,如下所示:

如何在Matplotlib中(可靠且可重复地)执行此操作?

最简单的情况:静态绘图 对于静态绘图,它很简单:

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.axis([0, 2000, 0, 2e-9])

label = ax.xaxis.get_ticklabels()[-1]
label.set_bbox(dict(facecolor='none', edgecolor='red'))

plt.show()

(请注意,如果要更改填充、圆角、形状等,可以通过多种方式配置标签周围的框。有一些示例。请参阅
bbox
boxstyle
示例。)


跟上交互式变化 但是,如果我们以交互方式缩放或平移,带有红色边框的刻度标签不一定是2000。(相反,它将基于索引。)

平移:

缩放:

要完全重复地执行此操作,以便无论如何交互缩放和填充,它都将保持在那里,您需要将回调连接到draw事件


使用注释而不是标签 然而,无论如何,有一种更简单的方法可能更适合您的目的

与其将其作为记号标签,不如使用注释来绘制。这样,无论标记是如何绘制的,标签都将始终处于指定的值

作为一个非常粗俗的例子(通常,您可能会将文本标签放在下面一点…):

无论我们如何缩放或平移,它在x轴上都将保持在2000(尽管它不能保证在2000时会有刻度或刻度标签):

不过,更常见的情况是,您可以使用它来放置或注释某些特定的值。例如:

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.axis([0, 2000, 0, 2e-9])

ax.annotate('Cutoff', xy=(2000, 0), xytext=(0, -15 - ax.xaxis.labelpad),
            xycoords=('data', 'axes fraction'), textcoords='offset points',
            ha='center', va='top',
            bbox=dict(boxstyle='round', fc='none', ec='red'))

plt.show()

请注意,无论我们如何缩放或平移,这也将保持在x轴上的a位置2000,并且无论标签是否在那里,它都将在那里

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.axis([0, 2000, 0, 2e-9])

ax.annotate('Cutoff', xy=(2000, 0), xytext=(0, -15 - ax.xaxis.labelpad),
            xycoords=('data', 'axes fraction'), textcoords='offset points',
            ha='center', va='top',
            bbox=dict(boxstyle='round', fc='none', ec='red'))

plt.show()