Как получить протяженность тиковых меток, xlabel или ylabel? - PullRequest
0 голосов
/ 08 февраля 2019

Для примера кода я могу получить протяженность топора, которая обозначена красной вертикальной линией.Я также проиллюстрировал расширение тиковых меток и ylabel, используя желтый и синий, оценивая значение.

Есть ли функциональный способ получить ограничивающий прямоугольник с тикелами, клабелами или 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 inj_box и рисунок inj_box

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 голосов
/ 08 февраля 2019

Я интерпретирую вопрос как спросить, как получить ограничивающую рамку для различных текстовых элементов на графике.Эти ограничивающие рамки определяются во время розыгрыша.Следовательно, сначала нужно нарисовать фигуру.Затем

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...