Нет окна сюжета в matplotlib

66

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

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

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

  • 7
    По умолчанию pylab не показывает график, поскольку рисование и постоянное обновление могут быть дорогими. Вам нужно сделать явное show() .
  • 1
    Некоторая официальная документация по этому вопросу: matplotlib.org/faq/…
Теги:
matplotlib

10 ответов

107
Лучший ответ

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

import pylab
pylab.show()

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

33

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

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

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

  • 1
    но сначала вам нужно вызвать pylab.show() чтобы даже открыть фигуру.
  • 3
    @Steve: мой опыт показывает, что это сильно зависит от серверной части. В Mac OS X с обычной оболочкой Python мне не нужно выполнять show () (или draw (), в этом отношении): plot () открывает новое окно.
Показать ещё 3 комментария
13

Попробуйте следующее:

import matplotlib
matplotlib.use('TkAgg') 

ПЕРЕД ПОИСКОМ импорта

  • 6
    Что это должно сделать?
  • 2
    Это работает сейчас, спасибо.
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
    Полностью работает, спасибо. Для ясности, самое простое (если вы знаете, что это работает, разумеется), это установить свой бэкэнд в .matplotlib/matplotlibrc как backend: Agg . Тогда вам не нужно явно use один раз каждый :)
5

Ниже приведен фрагмент кода, который работает как для Eclipse, так и для оболочки Python:

import numpy as np
import matplotlib.pyplot as plt
import pylab

# 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
pylab.show()
  • 0
    Как поясняется во многих других ответах, в данный момент это может сработать для вас, но все зависит от того, как настроен ваш бэкэнд matplotlib.
2

Современный IPython использует аргумент "--matplotlib" с дополнительным параметром backend. По умолчанию используется "авто", что обычно достаточно хорошо для Mac и Windows. Я не тестировал его на Ubuntu или любом другом дистрибутиве Linux, но я бы ожидал, что он сработает.

ipython --matplotlib
0

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

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

Если вы запускаете IPython с опцией --pylab, вам не нужно вызывать show() или draw(). Попробуйте следующее:

ipython  --pylab=inline
0

Если вы столкнулись с проблемой, в которой pylab.show() зависает окно IPython (это может быть Mac X конкретный, не уверен), вы можете cmd-c в окне IPython, переключиться в окно графика и вырвется.

По-видимому, будущие вызовы pylab.show() не закроют окно IPython, а только первый вызов. К сожалению, я обнаружил, что поведение окна сюжета/взаимодействия с show() изменяется каждый раз при повторной установке matplotlib, поэтому это решение может не всегда выполняться.

-6

Другая возможность при использовании easy_install заключается в том, что вам потребуется самая последняя версия matplotlib. Попробуйте:

import pkg_resources
pkg_resources.require("matplotlib")

перед импортом matplotlib или любого из его модулей.

  • 2
    Это просто гарантирует, что matplotlib установлен, а не влияет на то, как выполняется обработка окна.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню