У matplotlib немає вікна сюжету


90

Я щойно встановив matplotlib в Ubuntu 9.10 за допомогою системи пакунків synaptic. Однак, коли я спробую наступний простий приклад

>>> from pylab import plot;
>>> plot([1,2,3],[1,2,3])
[<matplotlib.lines.Line2D object at 0x9aa78ec>]

Я не отримую вікна сюжету. Будь-які ідеї щодо того, як змусити показати вікно сюжету?


8
pylab не відображає графік за замовчуванням, оскільки малювання та постійне оновлення можуть бути дорогими. Вам потрібно зробити явний show().
Alok Singhal

1
Деяка офіційна документація з цього питання: matplotlib.org/faq/…
stephenbez

Відповіді:



38

pylab.show() працює, але блокує (потрібно закрити вікно).

Набагато зручнішим рішенням є зробити pylab.ion()(інтерактивний режим увімкнено) при запуску: усі (еквіваленти пілабу) pyplot.*команди негайно відображають свою ділянку. Більше інформації про інтерактивний режим можна знайти на офіційному веб-сайті.

Я також використовую ще зручніший ipython -pylab( --pylabв нових версіях), який дозволяє пропустити from … import …частину ( %pylabпрацює також у нових версіях IPython).


1
але pylab.show()спочатку потрібно зателефонувати, щоб навіть відкрити фігуру.
Steve Tjoa

3
@Steve: мій досвід полягає в тому, що це сильно залежить від бекенда. У Mac OS X зі звичайною оболонкою Python мені не потрібно показувати () (або малювати (), з цього приводу): plot () відкриває нове вікно.
Eric O Lebigot

1
Гаразд Гарна думка. У мене є досвід роботи з ipython в Linux.
Steve Tjoa

draw () у мене не працює, але pylab.ion () працює. Я використовую OSx
user1506145

Те саме, що і в оболонці Python з останньою Matplotlib. Я оновив свою відповідь, дякую.
Ерік Лебіго


11

Фрагмент коду нижче працює як на Eclipse, так і на оболонці Python:

import numpy as np
import matplotlib.pyplot as plt

# Come up with x and y
x = np.arange(0, 5, 0.1)
y = np.sin(x)

# Just print x and y for fun
print x
print y

# Plot the x and y and you are supposed to see a sine curve
plt.plot(x, y)

# Without the line below, the figure won't show
plt.show()

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

9

Виявляються помилки? Це може спричинити невстановлення бекенда. Ви можете встановити його з інтерпретатора Python або з конфігураційного файлу (.matplotlib/matplotlibrc ) у домашній директорії.

Щоб встановити бекенд у коді, ви можете це зробити

import matplotlib
matplotlib.use('Agg')

де 'Agg' - це назва бекенда. Які резервні копії присутні, залежить від вашої установки та ОС.

http://matplotlib.sourceforge.net/faq/installing_faq.html#backends

http://matplotlib.org/users/customizing.html


1
Цілком працює, дякую. Щоб було ясно, найпростіше зробити (як тільки ви konw це працює, звичайно), щоб встановити бекенд в .matplotlib/matplotlibrcдо backend: Agg. Тоді вам не доведеться явно useкожного разу :)
dsummersl

2

Сучасний IPython використовує --matplotlibаргумент " " з необов'язковим параметром бекенда. За замовчуванням значення "авто", що зазвичай досить добре для Mac і Windows. Я не тестував його на Ubuntu чи будь-якому іншому дистрибутиві Linux, але я очікував би, що він спрацює.

ipython --matplotlib

0

Якщо ви зіткнетеся з проблемою, в якій pylab.show() зависає вікно IPython (це може бути для Mac OS X; не впевнений), ви можете cmd-c у вікні IPython, переключитися на вікно графіку, і воно вирветься.

Очевидно, майбутні дзвінки до pylab.show()не заморозять вікно IPython, лише перший виклик. На жаль, я виявив, що поведінка вікна сюжету / взаємодії з show () змінюється кожного разу, коли я перевстановлюю matplotlib, тому це рішення може не завжди мати місце.


0

Якщо ви запускаєте IPython з --pylabопцією, вам не потрібно буде телефонувати show()або draw(). Спробуйте це:

ipython  --pylab=inline

0

--pylabбільше не працює для Jupyter , але, на щастя, ми можемо додати налаштування у ipython_config.pyфайл, щоб отримати як функції, pylabтак і autoreloadфункції.

c.InteractiveShellApp.extensions = ['autoreload', 'pylab']
c.InteractiveShellApp.exec_lines = ['%autoreload 2', '%pylab']

0

Якщо ви користуєтеся Anaconda та Spyder, то найкращим рішенням для вас є таке:

Інструменти -> Налаштування -> Консоль Ipython -> Графічний розділ

Потім у розділі Підтримка графіки (Matplotlib) :

виберіть два доступних варіанти

та в графічному інтерфейсі :

виберіть Автоматично


-5

Інша можливість використання easy_install полягає в тому, що вам потрібна найновіша версія matplotlib. Спробуйте:

import pkg_resources
pkg_resources.require("matplotlib")

перед імпортом matplotlib або будь-якого з його модулів.


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