Как я могу открыть интерактивное окно matplotlib в записной книжке IPython?

125

Я использую IPython --pylab=inlineи иногда мне хотелось бы быстро переключиться на интерактивный масштабируемый графический интерфейс matplotlib для просмотра графиков (тот, который появляется, когда вы что-то рисуете в терминальной консоли Python). Как я мог это сделать? Желательно не выходить из ноутбука и не перезагружать его.

Проблема со встроенными графиками в ноутбуке IPy заключается в том, что они имеют ограниченное разрешение, и я не могу увеличить их, чтобы увидеть некоторые более мелкие части. С помощью графического интерфейса maptlotlib, который начинается с терминала, я могу выбрать прямоугольник графика, который я хочу увеличить, и оси скорректировать соответственно. Я пробовал экспериментировать с

from matplotlib import interactive
interactive(True)

и

interactive(False)

но это ничего не дало. В сети я тоже не нашла намеков.

metakermit
источник
4
Другое возможное решение вашей исходной проблемы - включить масштабирование ваших встроенных графиков, что теперь возможно, как я описал здесь: stackoverflow.com/a/22949003/145823
yonilevy
3
%matplotlib notebook работает
мюон

Ответы:

140

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

In [2]: %matplotlib inline 
In [3]: plot(...)

In [4]: %matplotlib qt  # wx, gtk, osx, tk, empty uses default
In [5]: plot(...) 

и появится обычное окно графика (может потребоваться перезагрузка ноутбука).

Надеюсь, это поможет.

Адриан Мартин
источник
2
Это %pylab qt. Не работает в OS X. Может, в Ubuntu поможет.
metakermit
11
К сожалению, переключаться туда и сюда нельзя. Если вы попытаетесь переключиться после запуска с pylab = inline или pylab = qt, вы получите: Этот вызов matplotlib.use () не имеет никакого эффекта, потому что бэкэнд уже выбран; matplotlib.use () должен быть вызван перед первым импортом pylab, matplotlib.pyplot или matplotlib.backends.
Чарл Бота
3
Я отклонил это, потому что это не сработало для меня и до сих пор не работает, но, по-видимому, это проблема 1927 года, и ее нужно было исправить с помощью слияния 2179 . @yarox, если вы отредактируете свой ответ, чтобы включить эту информацию, я отменю свой голос против.
askewchan
2
отлично работает здесь и на OSX, используя ipython v1.1.0 и MPL 1.3.0
K.-Michael Aye
1
У меня работает сейчас (2014-08) с использованием текущей версии Python 2.7 на Win7 x64.
nerdfever.com
65

Если все, что вы хотите сделать, это переключиться со встроенных графиков на интерактивные и обратно (чтобы вы могли панорамировать / масштабировать), лучше использовать% matplotlib magic.

#interactive plotting in separate window
%matplotlib qt 

и обратно в html

#normal charts inside notebooks
%matplotlib inline 

% pylab magic импортирует множество других вещей и может даже привести к конфликту. Делает "из импорта * pylab".

Вы также можете использовать новый бэкэнд для записных книжек (добавлен в matplotlib 1.4):

#interactive charts inside notebooks, matplotlib 1.4+
%matplotlib notebook 

Если вы хотите, чтобы ваши графики были более интерактивными, вы можете взглянуть на mpld3 и боке . mpld3 отлично подходит, если у вас нет тонны точек данных (например, <5k +) и вы хотите использовать обычный синтаксис matplotlib, но с большей интерактивностью по сравнению с ноутбуком% matplotlib. Bokeh может обрабатывать множество данных, но вам нужно изучить его синтаксис, поскольку это отдельная библиотека.

Также вы можете проверить pivottablejs (pip install pivottablejs)

from pivottablejs import pivot_ui
pivot_ui(df)

Каким бы крутым ни было интерактивное исследование данных, оно может полностью испортить воспроизводимость. Это случилось со мной, поэтому я стараюсь использовать его только на самом раннем этапе и переключаюсь на чистый встроенный matplotlib / seaborn, как только я нащупываю данные.

владимир
источник
1
Warning: Cannot change to a different GUI toolkit: notebook. Using qt instead.для %matplotlib notebook.
mLstudent33
1
ImportError: Failed to import any qt bindingдля команды qt magic
mLstudent33
31

Начиная с matplotlib 1.4.0 теперь есть интерактивный сервер для использования в ноутбуке.

%matplotlib notebook

Существует несколько версий IPython, в которых этот псевдоним не зарегистрирован, откат:

%matplotlib nbagg

Если это не сработает, обновите IPython.

Чтобы поиграть с этим, перейдите на tmpnb.org

и вставить

%matplotlib notebook

import pandas as pd
import numpy as np
import matplotlib

from matplotlib import pyplot as plt
import seaborn as sns

ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))
ts = ts.cumsum()

df = pd.DataFrame(np.random.randn(1000, 4), index=ts.index,
                  columns=['A', 'B', 'C', 'D'])
df = df.cumsum()
df.plot(); plt.legend(loc='best')    

в ячейку кода (или просто измените существующую демонстрационную записную книжку Python)

tacaswell
источник
6

Лучшим решением вашей проблемы может быть библиотека Charts . Это позволяет вам использовать отличную библиотеку JavaScript Highcharts для создания красивых и интерактивных графиков. Highcharts использует HTMLsvg тег поэтому все ваши диаграммы на самом деле являются векторными изображениями.

Некоторые особенности:

  • Векторные графики, которые вы можете скачать в форматах .png, .jpg и .svg, чтобы никогда не столкнуться с проблемами разрешения
  • Интерактивные диаграммы (масштабирование, слайд, наведение на точки, ...)
  • Можно использовать в ноутбуке IPython
  • Исследуйте сотни структур данных одновременно, используя возможности асинхронного построения графиков.

Отказ от ответственности: я разработчик библиотеки

arnoutaertgeerts
источник
Довольно приятная библиотека! Обязательно попробую :)
метакермит
Спасибо! Дайте мне знать, что вы думаете о github, и
сообщите
1
Хотя этот ответ определенно актуален, я бы не назвал его «лучшим решением». Скорее всего, именно это и вызывало в прошлом отрицательные голоса.
Владимир
1
Проголосовали против, так как в этом посте не говорится, как я могу использовать библиотеку Charts для открытия окна интерактивного графика.
Роберт Хёниг
4

Я использую ipython в «jupyter QTConsole» от Anaconda по адресу www.continuum.io/downloads от 28.05.2011.

Вот пример переключения между отдельным окном и режимом встроенного графика с использованием магии ipython.

>>> import matplotlib.pyplot as plt

# data to plot
>>> x1 = [x for x in range(20)]

# Show in separate window
>>> %matplotlib
>>> plt.plot(x1)
>>> plt.close() 

# Show in console window
>>> %matplotlib inline
>>> plt.plot(x1)
>>> plt.close() 

# Show in separate window
>>> %matplotlib
>>> plt.plot(x1)
>>> plt.close() 

# Show in console window
>>> %matplotlib inline
>>> plt.plot(x1)
>>> plt.close() 

# Note: the %matplotlib magic above causes:
#      plt.plot(...) 
# to implicitly include a:
#      plt.show()
# after the command.
#
# (Not sure how to turn off this behavior
# so that it matches behavior without using %matplotlib magic...)
# but its ok for interactive work...
Билл Мур
источник
1
Когда я пытаюсь использовать, %matplotlibя получаю сообщение об ошибке, которое заканчивается наImportError: No module named 'PyQt4'
user3731622
У меня та же проблема, что и у пользователя 3731622. Что может быть сделано? Это большая часть ответов на этой странице
bernando_vialli
@mkheifetz @ user3731622 Вам может потребоваться установить пакет: sudo apt-get install python-pyqt5илиsudo apt-get install python-pyqt5
ttb
2

Перезапустите ядро ​​и очистите вывод (если не начинаете с нового ноутбука), затем запустите

%matplotlib tk

Для получения дополнительной информации перейдите к Построению с помощью matplotlib

Марцин Лентнер
источник
0

Ты можешь использовать

%matplotlib qt

Если вы получили сообщение об ошибке, ImportError: Failed to import any qt bindingустановите PyQt5 как: pip install PyQt5и он сработает для меня.

susan097
источник