2015-07-18 2 views
6

вы наверняка знаете быстрый способ, как я могу отслеживать пределы моей фигуры после увеличения? Я хотел бы точно знать координаты, чтобы воспроизвести фигуру с ax.set_xlim и ax.set_ylim. Я использую стандартный сервер qt4agg.Matplotlib: Поиск xlim и ylim после масштабирования

Редактировать: Я знаю, что могу использовать курсор, чтобы узнать две позиции в нижнем и верхнем углах, но, возможно, существует формальный способ сделать это?

+0

Вы можете использовать '' ax.get_xlim' и ax.set_ylim' получить пределы. – hitzg

ответ

16

matplotlib имеет API обработки событий, с помощью которого вы можете подключаться к действиям, подобным тем, на которые вы ссылаетесь. На странице Event Handling представлен обзор API событий, и есть краткое описание событий x и y-ограничений на странице Axes.

В вашем сценарии вы хотите зарегистрировать функции обратного вызова на событиях Axes объекта xlim_changed и ylim_changed. Эти функции будут вызываться всякий раз, когда пользователь увеличивает или изменяет область просмотра.

Вот минимальный рабочий пример:

import matplotlib.pyplot as plt 

# 
# Some toy data 
x_seq = [x/100.0 for x in xrange(1, 100)] 
y_seq = [x**2 for x in x_seq] 

# 
# Scatter plot 
fig, ax = plt.subplots(1, 1) 
ax.scatter(x_seq, y_seq) 

# 
# Declare and register callbacks 
def on_xlims_change(axes): 
    print "updated xlims: ", ax.get_xlim() 

def on_ylims_change(axes): 
    print "updated ylims: ", ax.get_ylim() 

ax.callbacks.connect('xlim_changed', on_xlims_change) 
ax.callbacks.connect('ylim_changed', on_ylims_change) 

# 
# Show 
plt.show() 
+0

Этот пример не работает для Python 3. Даже если 'print' и 'xrange' исправлены,' axes.get_xlim() 'не создает значений. – eatcrayons

+1

@eatcrayons Это правильно, потому что 'axes' не определен; он должен быть 'ax.get_xlim()' - я отредактировал ответ. – ImportanceOfBeingErnest

0
print ax.get_xlim(), ax.get_ylim() 
+1

Это, вероятно, не то, о чем спрашивал ОП; по моему опыту, эти функции возвращают пределы, заданные set_xlim(), но не обращают внимания на то, какое представление пользователь вручную запустил/увеличил впоследствии. – dominecf

+1

Тогда почему принятый ответ работает? Он также использует '.get_xlim'. –

+1

Да, этот ответ верен в том смысле, что 'ax.get_xlim()' вернет текущие пределы графика в любой момент времени, даже после масштабирования. Поэтому, если один из них способен взаимодействовать с фигурой и вызывает такую ​​команду в интерактивном режиме, например, в сеансе IPython это прекрасно работает. Если график создается сценарием, у вас обычно нет этой опции; в этом случае другой ответ показывает, как использовать события, необходимые для печати пределов. – ImportanceOfBeingErnest

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