Графіки Matplotlib не відображаються в Mac OSX?


81

Я працюю під управлінням Mac OSX 10.5.8. Я встановив matplotlib за допомогою macports. Я отримую кілька прикладів з галереї matplotlib, як цей, без змін:

http://matplotlib.sourceforge.net/examples/api/unicode_minus.html

Я запускаю його, не отримую помилок, але зображення не відображається. У Linux Ubuntu я розумію.

Чи знаєте ви, що тут може бути не так?


У моєму випадку змова відображалася спочатку, а потім зупинилася, оскільки я встановлював пару інших пакетів, таких як pandasql, boxsdk тощо [не впевнений, що це зламало]. Повторна установка matplotliibвирішила мою проблему. Багато корисних пропозицій / виправлень можна знайти у відповідях. Якщо жоден з них не допомагає, перш ніж відмовитися, спробуйте перевстановити matplotlib.
Роберт

Відповіді:


48

Я можу це перевірити і на своєму кінці. Щоб виправити, ось що я зробив

sudo port install py25-matplotlib +cairo+gtk2
sudo port install py26-matplotlib +cairo+gtk2

Крім того, нам потрібно змінити стандартну серверну версію на GUI.

Відредагуйте файл ~/.matplotlib/matplotlibrcі додайте:

backend: GTKCairo

Крім того, ви можете спробувати наступне, що може призвести до того, що вам не потрібні беткени GTK або Cairo. Відредагуйте ~/.matplotlib/matplotlibrcта додайте:

backend: MacOSX

З портом із встановленими варіантами це також працює, але для цього не потрібен X11.


До речі, помилка, яку я побачив, була наступною:

/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/matplotlib/backends/__init__.py:41: UserWarning: 
Your currently selected backend, 'Agg' does not support show().
Please select a GUI backend in your matplotlibrc file ('/Users/wlynch/.matplotlib/matplotlibrc') or with matplotlib.use()
(backend, matplotlib.matplotlib_fname()))

3
Ким ти врешті-решт скористався? бекенд MacOSX або GTKCairo?
Білл Лінч

2
Мені довелося додати файл matplotlibrc b \ c його там не було. Я успішно використовував бекенд MacOSX.
SargeATM

123

У мене була та сама проблема, навіть я бачив, як було створено нове вікно програми і одразу ж зникло.

Просте рішення - просто перевірте, чи є у вас

plt.show()

після сюжету


1
Це спрацювало для мене з тією ж проблемою на pylab. Дякую!
Patrick Cook

3
Це спрацювало для мене, також використовуючи змову з пандами, а потім, import matplotlib.pyplot as pltа потім нехай з’явиться. Це трохи дивно, але це спрацювало нормально!
Аллан Карлсон,

1
Це було рішення для отримання графіків, які відображаються в PyCharm 2018.1 (працює на OSX) також на вкладці Науковий режим (SciView)!
neurozen

2
Причина, по якій це працює, пов’язана з інтерактивним та неінтерактивним режимами. Якщо бекенд відкрито в неінтерактивному режимі, plt.show()це потрібно в кінці фрагмента коду. Ви можете перевірити статус, зателефонувавши plt.isinteractive()та перемкнувши статус, використовуючи plt.ion()таplt.ioff()
nphadke

1
Не роби як я; плутати fig.show()з plt.show().
T'n'E

47

Це те, що мені вдалося. Я щойно змінив імпорт Matplotlib

import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt

2
це також спрацювало для мене на mac OS X у віртуальному середовищі
Camron_Godbout

Також працював у мене! Їх pyplotслід імпортувати після .use!
ch271828n

Я встановив matplotlib.use("TkAgg")після всього імпорту, і він все ще працює нормально, тому я не думаю, що порядок тут важливий.
retif

Виправлення мого попереднього коментаря - у подібних роботах з останніми версіями matplotlib, але у старих версіях вам справді доводилося це робити перед імпортом.
retif

12

Коли ти намагаєшся

plt.savefig('myfilename.png')

замість

plt.show()

чи це зберігає правильне зображення, назване myfilename.pngу поточному шляху?


Крім того : це наводить на думку (для «не показуючи вгору» частини) , що вам може знадобитися , щоб мати файл matplotlibrc (пошук для нього першим) і змінити бекенд до tkAgg: newmediaandcapitalmarkets.org/component/content/article / ... . Який пітон ти використовуєш?
ChristopheD

7

Після сюжету просто додайте -

plt.show()

Причина, по якій це працює, пов’язана з інтерактивним та неінтерактивним режимами. Якщо бекенд відкрито в неінтерактивному режимі, plt.show()це потрібно в кінці фрагмента коду. Ви можете перевірити стан, зателефонувавши plt.isinteractive()та перемикаючи статус за допомогою plt.ion()таplt.ioff()


@nphadke - Використовуючи plt.show()- Я отримав змову показати, потім спробував перед моєю plt.legend(), зробив plt.ion()- і видалив plt.show(), і отримав свою plt.isinteractive()друк True, але все-таки не отримав змови для показу. Отже, що робити, plt.ion()щоб перейти в інтерактивний режим - якщо хтось просто хотів перевірити, працює це чи ні без використання plt.show()?
прагнення 1

3

просто додати нотатку,

Файл matplotlibrc відсутній у моїй системі, і мені довелося завантажити копію з веб-сайту matplotlib. Можливо, майбутнім користувачам доведеться зробити те саме.


3

Це те, що мені вдалося:

brew install pkg-config
brew link pkg-config
brew install pygtk
brew install freetype
brew install libpng

sudo ln -s /usr/local/Cellar/freetype/*/lib/pkgconfig/freetype2.pc /usr/local/lib/pkgconfig/freetype2.pc

git clone git@github.com:matplotlib/matplotlib.git
cd matplotlib
python setup.py build
python setup.py install

Список літератури:

http://blog.caoyuan.me/2012/08/matplotlib-error-mac-os-x/ http://matplotlib.org/faq/installing_faq.html#install-from-git http: //www.tapir .caltech.edu / ~ dtsang / python.html


це в поєднанні з розміщенням backend: tkAgg~ / .matplotlib / matplotlibrc спрацювало для мене
Коллін

Дякую тонна! Після всього болісного роумінгу в Google, нарешті, це вирішило проблему для мене!
привіт, 15

2

У мене був лише python 2.5, і я не хотів встановлювати python 2.6 на своєму mac. Тому я використав іншу процедуру, згадану в наступному посиланні, щоб вирішити цю проблему:

http://www.gtkforums.com/viewtopic.php?f=3&t=54928

Цьому насправді потрібні наступні кроки:

1) Пошук, де знаходиться каталог "pygtk-2.0.pc", і знайдіть його. Наприклад, мій містився в наступному каталозі:

/ opt / local / lib / pkgconfig

2) Додавання інформації про шлях до змінної середовища. Наприклад:

PKG_CONFIG_PATH=/opt/local/lib/pkgconfig
export PKG_CONFIG_PATH

3) Завантажте файл інформації про конфігурацію "matplotlibrc" з веб-сайту matplotlib http://matplotlib.sourceforge.net/_static/matplotlibrc

4) Змініть бекенд на MacOSX у файлі та збережіть його

5) Скопіюйте файл у каталог .matplotlib Ви можете знайти каталог у python за допомогою такої команди:

import matplotlib
matplotlib.get_configdir()

2

Mac поставляється зі своїм власним python ( читайте звідси , що є не найкращим), я б запропонував просто встановити якийсь Python 3.7 або близько того разом з Anaconda, а потім представити їх як інтерпретатори PyCharm. що-небудь буде працювати нормально, і вам не доведеться додавати спеціальні рішення, такі як "backend: MacOSX" або близько того.


2

Я хочу поділитися цим дієвим рішенням для мене,

import matplotlib
import platform
if platform.system() == 'Darwin':
    matplotlib.use('MacOSX')

0

Виконайте наступне, якщо хтось використовує шпигун.

1.) Запустіть Spyder 2.3.5.2 із запуску Anaconda 2.) Перейдіть до налаштувань -> Консоль IPython -> Графіка -> Бекенд: змінив його на «Автоматичний» 3.) Виберіть «Застосувати» та закрийте налаштування 3.) Перезапустіть ядро ​​IPython 4.) Створіть просту графіку, як


0

Як тимчасову роботу можна зберегти малюнок у форматі .png / .jpg / .pdf і скористатися цим файлом на даний момент.

## assuming price is out DataFrame that contains columns that we want to plot 
pdf_plot=price.plot().get_figure()  
pdf_plot.savefig('Stocks.pdf')

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