Як я можу відкрити інтерактивне вікно matplotlib в ноутбуці IPython?


125

Я використовую IPython з --pylab=inlineі іноді хотів би швидко перейти на інтерактивний, масштабуваний графічний графічний графічний графічний графічний графічний графічний графічний графічний графічний графічний графічний графічний графічний графічний графічний графічний графічний графічний графічний графічний графічний графічний графічний інтерфейс (на той, який виводиться, коли ви плануєте щось на термінальній консолі Python). Як я міг це зробити? Переважно, не залишаючи або перезавантажуючи свій ноутбук.

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

from matplotlib import interactive
interactive(True)

і

interactive(False)

але це нічого не зробило. В Інтернеті я також не знайшов жодної підказки.


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.

#interactive plotting in separate window
%matplotlib qt 

і назад до html

#normal charts inside notebooks
%matplotlib inline 

% магічних пілабів імпортує купу інших речей і навіть може призвести до конфлікту. Це робиться "від імпорту пілабу *".

Ви також можете використовувати новий бекенд для ноутбука (доданий в matplotlib 1.4):

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

Якщо ви хочете мати більше інтерактивності в ваших графіках, ви можете подивитися на mpld3 і боке . mpld3 чудово, якщо у вас немає точок даних (наприклад, <5k +), і ви хочете використовувати звичайний синтаксис matplotlib, але більше інтерактивності, порівняно з ноутбуком% matplotlib. Боке може обробляти безліч даних, але вам потрібно дізнатися, що це синтаксис, оскільки це окрема бібліотека.

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

from pivottablejs import pivot_ui
pivot_ui(df)

Як би круте інтерактивне дослідження даних, воно може повністю зіпсуватись із відтворюваністю. Це сталося зі мною, тому я намагаюся використовувати його лише на самому ранньому етапі та перейти на чистий вбудований матплотліб / морбонароджений, як тільки я зрозумів ці дані.


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.

Щоб грати з цим, goto 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)


6

Кращим рішенням вашої проблеми може стати бібліотека графіків . Це дозволяє вам використовувати відмінну бібліотеку javascript JavaScript Highcharts для створення красивих та інтерактивних сюжетів. Highcharts використовує svgтег HTML, тому всі ваші діаграми - це фактично векторні зображення.

Деякі функції:

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

Відмова: Я розробник бібліотеки


Досить приємна бібліотека! Я обов'язково спробую це :)
metakermit

Дякую! Дайте мені знати, що ви думаєте про github, і подайте питання, якщо у вас виникли проблеми :)
arnoutaertgeerts

1
Хоча ця відповідь, безумовно, актуальна, я б не обов'язково називати це "кращим рішенням". Саме це спричинило спад в минулому, швидше за все.
Володимир

1
Очевидно, оскільки ця публікація не говорить мені, як я можу реально використовувати бібліотеку графіків, щоб відкрити інтерактивне вікно сюжету.
Роберт Хоніг

4

Я використовую ipython в "jupyter QTConsole" від Anaconda на www.continuum.io/downloads 28.05.2017.

Ось приклад перегортання вперед-назад між окремим вікном та режимом вбудованого сюжету за допомогою ipython magic.

>>> 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


0

Можна використовувати

%matplotlib qt

Якщо ви отримали помилку, ImportError: Failed to import any qt bindingто встановіть PyQt5 як: pip install PyQt5і це працює для мене.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.