Есть ли простой способ получить pyplot для обработки вызовов до text()
или annotate()
, как если бы они были «данными», так что он автоматически расширил пределы оси, чтобы включить текст в границах графика (т. Е. , а не на полях)?Ограничения оси автонастройки pyplot
# this creates a barplot with a significance bracket
# but the p-value above the bracket overlaps the plot title
import matplotlib.pyplot as plt
p = plt.subplot(1, 1, 1)
b = plt.bar((0, 1), (2, 3), yerr=(0.1, 0.2))
bracket = [[[0.4, 0.4], [2.5, 3.8]],
[[0.4, 1.4], [3.8, 3.8]],
[[1.4, 1.4], [3.4, 3.8]]]
for x, y in bracket:
p.plot(x, y, 'k')
txt = p.text(0.9, 4.0, 'p < 0.001', ha='center')
plt.title('A significant MWE')
Мой текущий обходной путь заключается в создании текста, вызывая draw()
, получение bbox_patch
экстентов текста, превращенную эти экстенты координат данных, и вручную изменяя ybound
осей объекту что-то большее, чем трансформированной верхней степени. Для меня это кажется довольно крутым, и мне интересно, есть ли более простой способ.