2014-08-27 2 views
2

У меня есть много данных, которые коррелированы по оси x, но все они расположены вокруг очень разных значений Y. Данные также очень длинны на х, поэтому его трудно увидеть детали. Я хочу, чтобы у меня была возможность задать ось x вручную для набора данных, а затем график изменит масштаб оси y на основе значений точек данных, которые лежат внутри этой ручной установки оси x.Масштабная шкала y по оси, основанной на ручном увеличении оси x

Возможно ли это с помощью matplotlib?

+0

если вы используете 'ax.set_aspect ('equal')' вы получаете такое поведение ... –

+0

спасибо за ответ, не могли бы вы немного расшириться? Мне нужно сначала получить оси? Как вы говорите, что ось x является той, которая определяет ось y? – user3123955

+0

не будет set_aspect ('equal'), потому что ось y будет такой же, как ось x? Я не хочу этого поведения, ось y имеет гораздо больший диапазон, чем ось x и совершенно разные значения. Я хочу установить пределы оси x, а затем сам масштаб y, чтобы я мог легко видеть данные, которые лежат в пределах установленной оси x. Кроме того, я не имею никакого отношения между размером оси x и размером y, поэтому я не могу просто установить некоторое соотношение сторон. – user3123955

ответ

2

Основываясь на комментарий от mdurant я написал некоторый минимальный пример в качестве отправной точки для Вас:

import pylab as pl 

pl.figure() 
x = pl.rand(30) 
x.sort() 
y = pl.sin(2 * pl.pi * x) + 0.1 * pl.randn(30) 
pl.plot(x, y) 

def ondraw(event): 
    xlim = pl.gca().get_xlim() 
    y_sel = y[pl.logical_and(x > xlim[0], x < xlim[1])] 
    pl.gca().set_ylim((y_sel.min(), y_sel.max())) 

pl.gcf().canvas.mpl_connect('draw_event', ondraw) 

Вы можете добавить больше events для обработки движений мыши и т.д.

Некоторые комментарии:

  • Я использую pylab, так как он предоставляет полезные функции для генерации данных об экзаменах. Но вы также можете импортировать библиотеку matplotlib.
  • ondraw обработчик события получает текущие пределы х текущих осей gca(), выбирает y значения с соответствующими x координаты в пределах х и устанавливает новые пределы Y определяется минимальным и максимальным значением у выбранных координат.
  • С помощью mpl_connect мы присоединяем обработчик событий к текущим осям. Каждый раз, когда оси рисуются - например, из-за новых команд построения или ручного взаимодействия с пользователем - он вызывает ondraw, чтобы обновить лимиты y.
+0

Можете ли вы объяснить свой код еще немного? Вы, кажется, используете pylab, но я использую matplotlib. – user3123955

+0

@ user3123955: Пожалуйста, ознакомьтесь с [matplotlib документацией по обработке событий] (http://matplotlib.org/users/event_handling.html). PyLab - это в основном [другой интерфейс] (http://en.wikipedia.org/wiki/Matplotlib) для NumPy и matplotlib, которые часто используются бывшими пользователями Matlab. Вы можете использовать оба. Команды почти идентичны. – Falko

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