Ich versuche, ein Streudiagramm aus ~ 6 Millionen Punkten zu machen, um eine Art von Clustering zu verstehen.matplotlib scatter plotting über png
Wenn ich versuche, dies in einem einfachen Scatter-Befehl zu tun, beschwert sich Matplotlib über übermäßigen Speicher. Also habe ich beschlossen, 3000 Punkte zu plotten und dann die Figur im .png-Format zu speichern, die Figur zu löschen, die gespeicherte .png mit imread()
zu laden und dann die nächsten 3000 Punkte zu überlagern.
Ich bin mit einigen Problemen konfrontiert und ich verstehe nicht, wie sie entstanden sind. Mein Code ist ein bisschen zu lang, da ich eine Menge von Textdateien Parsen aber unten ist ein Beispiel Mockup-Code, der mein Denken repliziert:
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
plt.xlim(0,1000)
plt.ylim(-1000,1000)
plt.scatter(400,500,marker="+",c="r")
plt.gca().set_aspect('equal')
plt.draw()
plt.savefig(r"C:\TMP\fig1.png")
plt.clf()
im = plt.imread(r"C:\TMP\fig1.png")
implot = plt.imshow(im, origin='upper', aspect='equal', extent=[0,1000,-1000,1000], zorder=0)
plt.scatter(600,500,marker="+",c="b")
plt.savefig(r"C:\TMP\fig2.png")
plt.close(fig)
Das Ergebnis ist etwas, das ich nicht verstehen, wie zu interpretieren. Offensichtlich, ich nicht verstehe die Beziehung zwischen "Aspekt" und "Umfang" von IMshow(). Kann mir jemand dabei helfen?
Abbildung 1
Abbildung 2
Ich war beide fig1.png
und fig2.png
erwartet ein weiteres perfekt Overlay auf der Oberseite.
Dank! Ich werde wieder über mein Skript schauen. Ich habe vielleicht etwas verpasst, aber die Auffüllung beim Laden der fig1.png mit imshow() macht mich verrückt. Wie kann ich herausfinden, warum das PNG nicht perfekt mit der zweiten Figur überlagert ist? Es war nicht meine Absicht, eine Handlung in einem Grundstück zu bekommen ... – kabel
Ich finde nicht heraus, was das Problem ist, aber es ist ** NICHT ** eine gute Idee. Ich schlage vor, Sie machen es anders. – Lucas
Kein Problem, danke für Ihre Eingabe. Was ich zu erklären versuchte, ist, dass ich in der zweiten Figur nicht zwei Achssätze sehen möchte, wenn ich Plot-Save-Load-Plot wie ursprünglich geplant (mit jeweils nur 3000 Punkten) zeichnen möchte. Die gespeicherte Figur (Abbildung 1 oben) wird nicht richtig skaliert und ich komme mit Abbildung 2, die zwei Sätze von Achsen hat (eine aus der PNG und eine aus der neu erstellten Figur). Es gibt ein Padding-Problem, das ich nicht verstehe, wie es mit imshow() funktioniert. Oder ich könnte mein Skript ändern, wie Sie es vorschlagen. Vielen Dank. – kabel