The truth is rarely pure and never simple

matplotlib: EPS und Transparenz

Beim Erstellen einer Grafik mit matplotlib bin ich über die Problematik gestolpert, dass EPS nicht nur wegen der einschränkten Unterstützung unter Windows ein suboptimales Ausgabeformat zu sein scheint – es unterstützt keine Transparenzen: entweder man gibt den Vektorgrafik-Vorteil auf und begibt sich in die Niederungen des Rasterns von Bildern (gerade bei 2D-Diagrammen immer ein Grund zum Kopfschütteln) oder aber man erstellt Grafiken ohne Transparenzen (zurück zu den 90ern). Warum wird EPS also dennoch häufig als Austauschformat verlangt? Nunja – die fehlenden Transparenzen sind für (professionelles) Drucken nur hilfreich. Aber was nun, wenn man eine Datei hat, aber auf Filtereffekte wie Transparenz nicht verzichten möchte? Die kurze Antwort: rastern und über den Speicherbedarf fluchen. Für Menschen, denen ihre Arbeitszeit wenig und die Qualität des Ergebnisses viel wert ist, gibt es noch eine lange Antwort:

  1. matplotlib kann auch zu SVG exportieren (sogar genutzte LaTeX-Schriften)
  2. Die so erzeugte Datei kann man in Inkscape öffnen. In der Datei ist das gesamte Diagramm als eine SVG-Gruppe angelegt. Hält man die STRG-Taste gedrückt, kann man mit der Maus direkt die gewünschte Fläche auswählen.
  3. F7 ruft das Pipetten-Werkzeug auf den Plan. Wenn man nun oben sowohl “Aufnehmen” als auch “Zuweisen” aktiviert hat, genügt ein Klick auf halbtransparente Bereiche, die Farbe als Füllfarbe zu übernehmen. Nun muss noch die Deckkraft im “Füllung und Kontur”-Dialog (SHIFT+STRG+F) auf 100% gesetzt werden und schon kann die Datei als EPS exportiert werden.

Einen Haken hat diese Strategie: gibt es mehrere übereinanderliegende Flächen, von denen mindestens eine halbtransparent ist, muss man die Flächen vorher in einzelne, jeweils in einer Farbe zu färbende Polygone aufteilen. Also vielleicht doch lieber die Eingangsdaten rastern?