2015-01-11 7 views
1

Я работаю над куском кода, чтобы автоматически выравнивать метки оси x для переменного количества подзаговоров. Когда я начал с установкой позиции меток вручную проблемами, я проверил, чтобы убедиться, что я мог бы просто перейти от одного набора координат к другой, ничего не меняя, с фрагментом кода, как это:Непоследовательность координат текста оси Matplotlib?

# xaxes is a list of Axes objects 
textCoords = [ax.xaxis.get_label().get_position() for ax in xaxes] 
newCoords = [ax.transAxes.inverted().transform(ax.xaxis.get_label().\ 
    get_transform().transform(c)) for ax,c in zip(xaxes,textCoords)] 
for ax,c in zip(xaxes,newCoords): ax.xaxis.set_label_coords(*c) 

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

Я просто неправильно понял преобразования здесь?

ответ

0

Вы понимаете преобразования правильно, но есть предостережение от использования отображаемых координат перед отображением графика.

Короткий ответ заключается в том, что вставляя вызов plt.draw(), прежде чем ваш фрагмент кода выше будет исправлять вашу непосредственную проблему.

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

Можете ли вы подробнее рассказать о том, что вы пытаетесь сделать? Там может быть более простой способ.

В качестве альтернативы, если вы хотите избежать дополнительных draw, вы можете связать вещи через координаты фигуры до того, как график будет нарисован. (Они четко определены независимо.)

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