2015-01-02 16 views
19

Używam coś prostszego niż przykładowy kod na pyplot tutorial stronie internetowej:Pythona matplotlib błąd Cairo

import matplotlib.pyplot as plt 
plt.plot([1,2,3,4,5]) 
plt.show() 

ale kiedy go uruchomić, pojawia się błąd:

TypeError: Couldn't find foreign struct converter for 'cairo.Context'

I 'm na Pythonie 3.4.2, i zainstaluj nową instalację matplotlib, cairocfft> 0.6, numpy> = 1.6 z pip.

Próbowałem odinstalowywania cairocfft i chwytając z repozytoriów Arch, ale teraz mam błąd:

NotImplementedError: Surface.create_for_data: Not Implemented yet.

czy istnieje sposób aby narysować wykres liniowy podstawowa bez instalowania wielu bibliotek? Nie jestem entuzjastycznie nastawiony na installing pyqt4, jako poleca this blogpost. This github issue sugeruje zainstalowanie Gi-Cairo, ale gi-Kair nie jest na Arch repositories, nie mogę go znaleźć na PyPI (moja własna wyszukiwarka nie?)

pamiętam to jest bardzo proste na python2, ale zostały przeniesione do Python3 teraz .

+0

działać dobrze dla mnie na Arch. Mam python 3.4.2 i python-cairo 1.10.0-4. – matsjoyce

+0

Czy zainstalowałeś 'python-gobject'? – nwk

+0

@ nwk tak, zainstalowano 'python-gobject'. – JDong

Odpowiedz

29

Jest to na wypadek, gdyby ktoś miał ten sam problem na Ubuntu 14.04, tak jak w przypadku Pythona 3.4.3. Używając bitów i wskazówek z odpowiedzi JDonga, rozwiązałem ten problem w następujący sposób. (Zasadniczo zmienić backend matplotlib do qt5agg.)

  1. Instalacja python3-pyqt5. sudo apt-get install python3-pyqt5

  2. Dowiedz się, gdzie znajduje się plik matplotlibrc, aby móc go edytować. Można to zrobić za pomocą następujących w konsoli Pythona. import matplotlib matplotlib.matplotlib_fname()

  3. edytować plik matplotlibrc (prawdopodobnie będziesz wymagać sudo), znaleźć wiersz rozpoczynający backend :, i zmień go na backend : qt5agg. Jeśli taka linia nie istnieje, po prostu ją stwórz.

Powyższe kroki rozwiązały to dla mnie na Ubuntu 14.04. Mam nadzieję że to pomogło.

+0

Potwierdzone do pracy w Ubuntu 14.04 z Python 3.4 - FWIW plik wydaje się być zainstalowane w '/ usr/local/lib/python3.4/dist-packages/matplotlib/mpl-data/matplotlibrc' i powinno być takie samo dla wszystkich (chociaż metoda sugerowana przez @Ray działa dobrze). – Marco

6

To wydaje się być poważnym problemem; podczas dalszego grania znalazłem wiadomość o błędzie:

/usr/lib/python3.4/site-packages/matplotlib/backends/backend_gtk3agg.py:18: 
UserWarning: The Gtk3Agg backend is known to not work on Python 3.x with pycairo. 
Try installing cairocffi. 
"The Gtk3Agg backend is known to not work on Python 3.x with pycairo." 

Dziwnie jednak, ja zainstalować cairocffi. Najlepszym rozwiązaniem, jakie znalazłem, jest użycie innego backendu, jak sugeruje tcaswell w komentarzach. Znalazłem wywóz do pdf bardzo przyjemny z linii: plt.savefig("Graph.pdf").

skytux wspomina, że ​​zmiana backendu na Tk działa. https://stackoverflow.com/a/21791045/2534876 pokazuje, jak to zrobić.

Aktualizacja mar 2016: plotly to świetna alternatywa dla matplotlib, której teraz używam. Działa z przeglądarką w celu generowania dokumentów i nie miałem problemów z platformą.

2

W przypadku Pythona 2.7 może być rozwiązany poprzez zainstalowanie pakietu python-pyqt5 i korzystania pyplot tak:

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

Jeśli masz sudo acces można również ustawić jako domyślną Qt5Agg backend, zobacz Matplotlib Backend innych sposobów, aby ustawić swój backend.

3

Po instalacji Matplotlib ostrzegł mnie, aby zainstalować cairocffi, z powodu niezgodności w moim systemie. Po doświadczeniu NotImplementedError (wykresy nie są rysowane), instalacja pakietu Debiana python3-cairocffi rozwiązała problem.

+0

To powinno zostać poddane pod głosowanie. Znacznie lepszym rozwiązaniem niż zmiana backendu na Qt. –

2

Instalacja python-gi-cairo użyciu sudo apt-get install python-gi-cairo rozwiązać mój problem

+0

W moim przypadku (Debian 9.2), zaakceptowana odpowiedź nie pomogła, ale ta zrobiła! – phinz

Powiązane problemy