Горизонтальный зум ноутбука Ipython

У меня есть сюжеты в блокноте ipython. Я могу масштабировать встроенное изображение с помощью модуля mpld3. Однако прямо сейчас я могу увеличить только прямоугольник. Из-за характера моего приложения мне нужно горизонтальное масштабирование.

Есть ли способ масштабировать по горизонтали (используя курсор) в matplotlib? Еще лучше, могу ли я установить горизонтальное масштабирование с помощью кода без каких-либо манипуляций с клавиатурой? В Matlab я могу сделать это, установив:

figure(1); h=zoom; set(h,'Motion','horizontal','Enable','on');

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

%matplotlib inline
import matplotlib.pyplot as plt
import mpld3
import numpy as np
mpld3.enable_notebook()
x = np.arange(100)
y = np.sin(x)
z = np.cos(x)

ax1 = plt.subplot(2,1,1)
ax1.plot(x,y)
ax2 = plt.subplot(2,1,2, sharex=ax1)
ax2.plot(x,z)

person jkt    schedule 18.03.2016    source источник
comment
Если вы можете масштабировать прямоугольник, не можете ли вы просто установить его высоту в соответствии с вертикальными пределами вашего графика?   -  person Dan    schedule 18.03.2016
comment
@ Дэн, ты имеешь в виду мой курсор? Это довольно сложно, и вы можете легко испортить. Горизонтальное масштабирование имеет смысл, если у вас есть временной ряд.   -  person jkt    schedule 18.03.2016
comment
Я предположил, что вы имели в виду прямоугольный зум через код   -  person Dan    schedule 18.03.2016
comment
@ Дэн, нет, я хочу использовать мышь для увеличения разных сегментов моего временного ряда. Поэтому я буду использовать свой курсор для исследования сигнала, но я хотел бы сделать это горизонтально, а не прямоугольно.   -  person jkt    schedule 18.03.2016


Ответы (1)


Я бы предложил использовать Plotly, который отлично подходит для создания интерактивных графиков в Jupyter.

Вы можете получить больше информации о том, как строить временные ряды с его помощью ЗДЕСЬ, а также информацию о подграфиках ЗДЕСЬ. Вот что я сделал с вашими данными, надеюсь, это сделает то, что вы хотите!

%matplotlib inline
import plotly
from plotly import tools
import numpy as np
plotly.offline.init_notebook_mode() # run at the start of every notebook

x = np.arange(100)
y = np.sin(x)
z = np.cos(x)

trace1 = go.Scatter(x=x, y=y)
trace2 = go.Scatter(x=x, y=z)

fig = tools.make_subplots(rows=2, cols=1)

fig.append_trace(trace1, 1, 1)
fig.append_trace(trace2, 2, 1)

fig['layout'].update(height=600, width=600)
plotly.offline.iplot(fig)
person Cynthia GS    schedule 18.03.2016
comment
Привет, Синтия, отлично выглядишь. Единственное, чего не хватает, это связать оси, но я думаю, что это можно сделать. Быстрый вопрос: я делаю докторскую диссертацию по статистическому выводу для моделей временных рядов, и до сих пор я использовал Matlab. Я мучительно пытаюсь завершить переход с Matlab на Python. Что вы думаете о matplotlib/mpld3 и сюжете? Является ли одно предпочтительнее другого (особенно в контексте ИИ и МО)? - person jkt; 18.03.2016
comment
Привет @YBE, я на самом деле довольно новичок в Plotly, поэтому пока не могу сказать, но это отличный инструмент при использовании ноутбуков Jupyter. Я действительно думаю, что у людей гораздо больше опыта работы с matplotlib, что делает его хорошо документированным/изученным инструментом. Пока что я рассматриваю Plotly как более причудливый метод, предназначенный для особых нужд, но, возможно, я изменю свое мнение, когда привыкну к нему...! - person Cynthia GS; 18.03.2016