2011-09-30 12 views
25

Zgodnie z dokumentacją Matplotlib, matplotlib.figure.save_fig przyjmuje opcjonalny argument format (patrz matplotlib.figure documentation).W Matplotlib, istnieje sposób na poznanie listy dostępnych formatów wyjściowych

Ten parametr przyjmuje "jeden z rozszerzeń plików obsługiwanych przez aktywny backend" (zgodnie z oficjalną dokumentacją).

Chodzi mi o to, jak poznać, dla określonego backendu, listę obsługiwanych rozszerzeń?

Lista dostępnych kopii jest dostępna przez matplotlib.rcsetup.all_backends. Te backendy są dostępne w matplotlib.backends, ale nie znajduję sposobu na odzyskanie obsługiwanych rozszerzeń.

Odpowiedz

33

Jeśli tworzysz postać, można uzyskać dostępną obsługiwany format pliku z obiektem płótnie:

import matplotlib.pyplot as plt 
fig = plt.figure() 

print fig.canvas.get_supported_filetypes() 

>>> { 
    'svgz': 'Scalable Vector Graphics', 
    'ps': 'Postscript', 
    'emf': 'Enhanced Metafile', 
    'rgba': 'Raw RGBA bitmap', 
    'raw': 'Raw RGBA bitmap', 
    'pdf': 'Portable Document Format', 
    'svg': 'Scalable Vector Graphics', 
    'eps': 'Encapsulated Postscript', 
    'png': 'Portable Network Graphics' 
} 

i będzie to lista wszystkich formatów, w których można wyprowadzać bieżący obiekt.

+0

Nice one ... nie widział tej właściwości canvas na obiekcie figure. – ohe

+0

Niezbadana magia, płonie tak, jak leczy. Dzięki za to! Mój pas narzędziowy Matplotlib został teraz wyrównany. –

2

Klasa FigureCanvasBase, znajdująca się w każdym zapleczu, ma metodę get_supported_filetypes.

Dla backend_agg:

figure = matplotlib.figure.Figure() 
fcb = matplotlib.backends.backend_agg.FigureCanvasBase(figure) 
supported_file_types = fcb.get_supported_filetypes() 

supported_file_types zawiera:

{'emf': 'Enhanced Metafile', 
'eps': 'Encapsulated Postscript', 
'pdf': 'Portable Document Format', 
'png': 'Portable Network Graphics', 
'ps': 'Postscript', 
'raw': 'Raw RGBA bitmap', 
'rgba': 'Raw RGBA bitmap', 
'svg': 'Scalable Vector Graphics', 
'svgz': 'Scalable Vector Graphics'} 

One pozostały pytanie .... matplotlib.get_backend() powraca "agg". Czy istnieje prostszy sposób bezpośredniego wskazania właściwego modułu backendu?

+0

'matplotlib.get_backend()' to zwykły sposób (co nie jest łatwe?). jeśli chcesz zmienić backend, możesz to zrobić za pomocą 'matplotlib.use' lub ustawienia w pliku matplotlibrc,' matplotlib.matplotlib_fname() 'powie ci lokalizację pliku konfiguracyjnego. – wim

+0

'matplotlib.get_backend()' zwracanie surowego 'str' zamiast rzeczywistego modułu backendu jest funkcjonalnie bezużyteczne w większości przypadków użycia. Tak, możesz oczywiście "getattr (matplotlib.backends," backend_ '+ matplotlib.get_backend(). Lower()) "Twój sposób na pseudo-sukces - ** ale nie powinieneś tego robić. ** Odbieranie do tego rodzaju bolesnego hackeryka powinna być ostatnią deską ratunku. –

Powiązane problemy