Нет окна графика в matplotlib


92

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

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

У меня нет окна сюжета. Есть идеи о том, как отобразить окно графика?


8
pylab не отображает график по умолчанию, так как рисование и постоянное обновление могут быть дорогими. Вам нужно сделать явное show().
Алок Сингхал

1
Некоторая официальная документация по этому вопросу: matplotlib.org/faq/…
Stephenbez

Ответы:


143

Вы можете ввести

import pylab
pylab.show()

или лучше использовать ipython -pylab.


Поскольку использование pylab больше не рекомендуется , решение в настоящее время будет

import matplotlib.pyplot as plt

plt.plot([1,2,3])

plt.show()

38

pylab.show() работает, но блокирует (нужно закрыть окно).

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

Во-вторых, я использую еще более удобный ipython -pylab( --pylabв более новых версиях), который позволяет пропустить from … import …часть ( %pylabработает также и в более новых версиях IPython).


1
но pylab.show()для открытия фигуры нужно сначала позвонить .
Стив Тьоа,

3
@ Стив: мой опыт показывает, что это сильно зависит от серверной части. В Mac OS X с обычной оболочкой Python мне не нужно выполнять show () (или draw (), если на то пошло): plot () открывает новое окно.
Эрик О Лебигот

1
Ах хорошо. Хорошая точка зрения. У меня есть опыт работы с ipython только в Linux.
Стив Тьоа,

draw () у меня не работает, но pylab.ion () работает. Я использую OSx
user1506145 05

То же самое здесь в оболочке Python с последней версией Matplotlib. Я обновил свой ответ, спасибо.
Эрик О Лебигот 06

17

Попробуй это:

import matplotlib
matplotlib.use('TkAgg') 

ПЕРЕД импортом pylab


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

где «Агг» - это имя серверной части. Какие бэкенды присутствуют, зависит от вашей установки и ОС.

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

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


1
Полностью работает, спасибо. Чтобы было ясно, самое простое, что нужно сделать (как только вы поймете, что это работает), - это настроить свой бэкэнд .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.