Как открыть интерактивное окно matplotlib в блокноте IPython?

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

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

from matplotlib import interactive
interactive(True)

а также

interactive(False)

но это ничего не сделало. Я не мог найти подсказки в Интернете.

Ответ 1

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

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

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

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

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

Ответ 2

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

#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 и bokeh. mpld3 отлично, если у вас нет тонны точек данных (например, < 5k +), и вы хотите использовать обычный синтаксис matplotlib, но больше интерактивности по сравнению с ноутбуком% matplotlib. Bokeh может обрабатывать множество данных, но вам нужно изучить его синтаксис, поскольку это отдельная библиотека.

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

from pivottablejs import pivot_ui
pivot_ui(df)

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

Ответ 3

Начиная с 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)

Ответ 4

Я использую ipython в "jupyter QTConsole" от Anaconda по адресу www.continuum.io/downloads, 28-28 марта.

Здесь приведен пример перехода назад и вперед между отдельным окном и встроенным сюжетным режимом с использованием магии 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...

Ответ 5

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

Некоторые функции:

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

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

Ответ 6

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

%matplotlib tk

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