对于示例代码,我可以得到用红色垂直线表示的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)
更新:
使用下面的代码可以获取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())
答案 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()