2016-05-02 4 views
1

я имел обыкновение использовать следующее, чтобы получить ширину легенды на рисунке координаты:Получение ширины легенды в Matplotlib

fig = plt.figure() 
ax = fig.add_axes((0.1, 0.1, 0.8, 0.8)) 
ax.scatter(xdata, ydata) 
legend = ax.legend(loc="lower left", borderaxespad=0) 
legend_width = legend.get_window_extent().inverse_transformed(fig.transFigure).width 

Я недавно обновил Matplotlib до версии 1.5.1. Ширина (и высота) всегда равна 1.0 перед преобразованием, а затем после преобразования они являются чрезвычайно малыми значениями (width = 0.0015625, height = 0.0020833), которые не имеют смысла в координатах фигуры.

Есть ли другой способ получить ширину легенды? Или это ошибка?

Спасибо!

ответ

2

Вы получаете немного оптимизацию производительности. Теперь мы откладываем фактическое отображение фигуры. В большинстве интерактивных случаев это означает, что рендеринг отложен до первого раза, когда он будет перерисован графическим интерфейсом. Точный размер легенды - это то, что выработано во время рисования, поэтому, когда вы просите размер окна, вы возвращаете значения владельца места.

Чтобы обойти эту проблему вы можете заставить рендеринг по

fig.canvas.draw() 

В общем, вы не хотите использовать get_window_extent. Это зависит от DPI и может привести к очень странным трудностям для отслеживания ошибок. Возвращаемое значение зависит от внутренних деталей, которые не обязательно обращены к пользователю, и как только вы сохранили вывод где-нибудь, вы можете (не будете) синхронизироваться.

+0

Спасибо, это действительно исправить. Я вызывал plt.draw(), но этого было недостаточно для обновления этих значений. Есть ли другой способ получить ширину окна легенды, которую я должен использовать вместо этого? У меня есть несколько осей на рисунке, и я хочу, чтобы ширина одной из этих осей соответствовала ширине легенды, так что все хорошо складывается ... –

+0

Plt.draw возвращается к draw_idle. Я думаю, что есть способ установить ширину легенды, но я не уверен (и на телефоне). – tacaswell

Смежные вопросы