2009-02-13 8 views
10

Ich versuche, eine Menge von Datenpunkten (viele tausend) in Python mit matplotlib zu plotten, also brauche ich jeden Marker sehr klein und präzise. Wie bekomme ich den kleinsten einfachsten Marker? Ich verwende diesen Befehl, meine Daten zu zeichnen:Python-Plotting: Wie kann ich Matplotlib.pyplot aufhören zu zwingen, den Stil meiner Marker?

matplotlib.pyplot(x , y ,'.',markersize=0.1,linewidth=None,markerfacecolor='black') 

Dann kann ich es auch dreht entweder mit pl.show() und speichern Sie es dann. Oder verwenden Sie direkt plt.savefig('filename.ps') im Code, um es zu speichern. Das Problem ist das: wenn ich pl.show() verwende, um die Datei in der GUI zu sehen, sieht es gut mit kleinen winzigen schwarzen Markierungen aus, aber wenn ich von der show() GUI in eine Datei speichere oder direkt savefig benutze und dann die ps sehe ich es anders aussieht ! Jeder Marker hat einen kleinen blauen Heiligenschein um ihn herum erhalten (als ob er an jedem Punkt begonnen hätte, um sie mit den blauen Standardlinien zu verbinden, aber nicht) und der Stil ist alles falsch. Warum ändert sich der Stil beim Speichern? Wie verhindere ich, dass Python den Stil der Marker erzwingt? Und ja, ich habe einige alternative Pakete wie CairoPlot angeschaut, aber ich möchte weiterhin matplotlib verwenden.

Update: Es stellt sich heraus, dass das Speichern zu PNG zuerst die Farben macht in Ordnung herausstellen, aber es zwingt, eine Umwandlung des Bildes, wenn ich es gespeichert werden soll wieder als .ps später (zur Aufnahme in einer PDF) und dann verliere ich die Qualität. Wie behalte ich den Vektor-Charakter der Datei und bekomme die richtige Formatierung?

+0

Nun, zum Zeichnen von Punkten hat die Stammversion von CairoPlot die ScatterPlot-Klasse. Mit diesem können Sie den Radius des Markers definieren, also können Sie ihn einfach auf 1 setzen, da dies die kleinste Option wäre. Gibt es einen besonderen Grund, CairoPlot nicht zu benutzen? – Rodrigo

Antwort

11

Verwenden Sie für schön aussehende vektorisierte Ausgabe nicht den Markierungsstil . Verwendung z.B. 'o' (Kreis) oder 's' (Quadrat) (help(plot) für die Optionen sehen) und stellen Sie das markersize Schlüsselwort-Argument, um etwas in geeigneter Weise klein, zB:

plot(x, y, 'ko', markersize=2) 
savefig('foo.ps') 

Die '.' (Punkt) erzeugt weniger guten Ergebnisse als ausgelegt werden könnte Fehler in Matplotlib, aber dann, was sollte "Punkt" in einem Vektor Grafikformat bedeuten?

2

Wenn nicht, sollten Sie versuchen, in einer Raster-Engine zu speichern - speichern Sie sie in einer PNG-Datei und sehen Sie, ob das Problem behoben ist. Wenn Sie ein Vektorplot benötigen, versuchen Sie, es in PDF zu speichern und mit einem externen Dienstprogramm zu konvertieren. Ich hatte auch schon mal Probleme mit der PS-Engine, die durch Speichern mit den Agg- oder PDF-Engines gelöst und extern konvertiert wurden.

+0

Ja, das funktioniert um. Übrigens machen wir die gleiche Arbeit. – Alex

6

Haben Sie die ',' Punktform versucht? Es erzeugt "pixels" (kleine Punkte, anstelle von Formen).

Sie können mit der markersize Option auch spielen, mit dieser Form?