如何获得刻度标签,xlabel或ylabel的扩展?

时间:2019-02-08 05:23:45

标签: python-3.x matplotlib

对于示例代码,我可以得到用红色垂直线表示的ax的扩展。我还通过估计值,使用黄色和蓝色说明了刻度标签和ylabel的扩展。

是否有一种实用的方法来获取ticklels,xlabel或ylabel的边框?

import matplotlib.pyplot as plt
fig, ax = plt.subplots(1, 1, figsize=(7.2, 7.2))
ax.set_xlabel('x_label', fontsize=14)
ax.set_ylabel('y_label', fontsize=14)

# method 1 to get the extend of ax
bbox1 = ax.get_position()
print(bbox1)
# method 2 to get the extend of ax
bbox2 = ax.get_window_extent().transformed(fig.transFigure.inverted())
print(bbox2)
ax.text(bbox1.x0, 0.2, '|', transform=fig.transFigure, color='r', fontsize=30)
ax.text(0.07, 0.2, '|', transform=fig.transFigure, color='b', fontsize=30)
ax.text(0.03, 0.2, '|', transform=fig.transFigure, color='y', fontsize=30)

enter image description here

更新:

使用下面的代码可以获取xaixs紧身框和图形紧身框

b1 = ax.xaxis.get_tightbbox(fig.canvas.get_renderer()).transformed(fig.transFigure.inverted())
b2 = ax.get_tightbbox(fig.canvas.get_renderer()).transformed(fig.transFigure.inverted())

1 个答案:

答案 0 :(得分:2)

我将问题解释为询问如何获得绘图中各种文本元素的边界框。这些边界框是在绘制时确定的。因此,首先需要绘制图形。然后

artist.get_window_extent()

返回艺术家的边界框。边框位于绝对像素坐标中。

import matplotlib.pyplot as plt
from matplotlib.transforms import IdentityTransform

def drawbb(bb, fig, **kwargs):
    r = plt.Rectangle((bb.x0, bb.y0), bb.width, bb.height, 
                      transform=IdentityTransform(), fill=False, **kwargs)
    fig.add_artist(r)


fig, ax = plt.subplots(1, 1, figsize=(3, 2))
ax.set_xlabel('x_label', fontsize=14)
ax.set_ylabel('y_label', fontsize=14)
fig.tight_layout()


fig.canvas.draw()

drawbb(ax.xaxis.label.get_window_extent(), fig, edgecolor="crimson")
drawbb(ax.yaxis.label.get_window_extent(), fig, edgecolor="indigo")
drawbb(ax.get_xticklabels()[3].get_window_extent(), fig, edgecolor="limegreen")

plt.show()

enter image description here