Bibliothek zum plotten großer Datenmengen gesucht

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
G-Rizzle
User
Beiträge: 90
Registriert: Donnerstag 18. Februar 2021, 12:26

Hi!

wie der Titel sagt, suche ich eine Bibliothek, mit der ich große Datenmengen plotten kann.
Die Daten liegen in einer Textdatei als xyz-Koordinaten vor (Hintergrund: das sind Aufnahmen eines Konfokalmikroskops, das genutzt wird, um sehr genaue Höhentopografien von (in meinem Fall Metall-3Dgedruckter) Oberflächen zu erhalten.)

Eine Datei hat etwa 200 MB und 20,000,000 Einträge. Plotly und Matplotlib haben das auf die ersten Versuche nicht geschafft.
Außerdem möchte ich jedes Pixel abhängig vom Höhenwert unterschiedlich einfärben.



Hat jemand von euch eine Idee, was ich dazu nutzen könnte?

Danke im Voraus!!
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Auf meinem 4K-Monitor habe ich knapp 8 Millionen Pixel. 20000000 Datenpunkte lassen sich da also im Grund nicht darstellen. Darum die Frage: kannst du die nicht downsampeln? Oder einen Ausschnitt darstellen?

Sonst fällt mir noch VTK ein. Das ist zur Visualisierung von Daten aus dem medizinischen Bereich, und unten drunter AFAIK in C++ geschrieben.
G-Rizzle
User
Beiträge: 90
Registriert: Donnerstag 18. Februar 2021, 12:26

hi deets,

ja, ich fürchte dass ich das so machen muss. Vielleicht Zehnteln. Mal sehen.

vtk sehe ich mir mal an
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Einfach nur zehnteln ist schwierig. Kann ok sein, wenn du nur einen groben Überblick haben willst. Aber wenn du feine Strukturen nicht falsch repräsentieren willst, musst du komplexere Algorithmen wie zb bikubische Filter benutzen.
narpfel
User
Beiträge: 645
Registriert: Freitag 20. Oktober 2017, 16:10

@G-Rizzle: Soll das interaktiv sein oder am Ende nur ein PNG rauskommen? Und sind die xy-Koordinaten in einem schönen Rechteckgitter angeordnet?

Für statische Bilder hatte ich bei einer 28 MPixel großen Grafik absolut keine Probleme mit matplotlib. Dauert nur ein paar Sekunden mit `imsave`:

Code: Alles auswählen

image = np.random.random((5000, 4000))
plt.imsave("image.png", image, cmap=...)
Und ein `plt.plot` kommt meiner Erfahrung nach auch mit mehreren Millionen Punkten klar, wenn man die Grafik nicht als Vektorgrafik speichert und `","` als Format benutzt.
tonikae
User
Beiträge: 90
Registriert: Sonntag 23. Februar 2020, 10:27

Schon "Plotly" ausprobiert?
https://plotly.com/
https://plotly.com/python/
https://www.tutorialspoint.com/plotly/index.htm

Das ist für große Datenmengen und Interaktionen gemacht.
Ausserdem ist es für mehrere Programmiersprachen verfügbar.
Zuletzt geändert von tonikae am Montag 6. Dezember 2021, 10:58, insgesamt 2-mal geändert.
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

@tonikae: er schreibt ja, dass er das probiert hat.

Wir benutzen das auch, und es ist gut. Aber nutzt den Browser als Engine. Das gibt viel Flexibilität, aber erhöht auch klar den Overhead. So weit ich weiß werden da ja die Daten einfach in HTML bzw JS Strukturen gerendert.
tonikae
User
Beiträge: 90
Registriert: Sonntag 23. Februar 2020, 10:27

Oops...habe ich glatt überlesen.
Ich habe nur Matplotlib registriert....mein Fehler
G-Rizzle
User
Beiträge: 90
Registriert: Donnerstag 18. Februar 2021, 12:26

narpfel hat geschrieben: Montag 6. Dezember 2021, 10:36 @G-Rizzle: Soll das interaktiv sein oder am Ende nur ein PNG rauskommen? Und sind die xy-Koordinaten in einem schönen Rechteckgitter angeordnet?

Für statische Bilder hatte ich bei einer 28 MPixel großen Grafik absolut keine Probleme mit matplotlib. Dauert nur ein paar Sekunden mit `imsave`:

Code: Alles auswählen

image = np.random.random((5000, 4000))
plt.imsave("image.png", image, cmap=...)
Und ein `plt.plot` kommt meiner Erfahrung nach auch mit mehreren Millionen Punkten klar, wenn man die Grafik nicht als Vektorgrafik speichert und `","` als Format benutzt.
Hi, danke dafür

was meinst Du mit der "plt.plot, wenn nciht als Vektorgrafik gespeichert"?
narpfel
User
Beiträge: 645
Registriert: Freitag 20. Oktober 2017, 16:10

@G-Rizzle: Pixelgrafik, Vektorgrafik. Wobei `plt.plot` wohl für den Anwendungszweck eher nicht geeignet ist.
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Wobei man `plt.plot()` aber auch sagen kann, dass die Daten als Pixel gerendert werden sollen (während der Rest Vektorgrafik bleibt), wenn man besonders viele Datenpunkte hat. Ansonsten sind für mehr Datenpunkte als man sinnvoll sehend erkennen kann auch 2D-Histogramme und `plt.hexbin()` sinnvolle Darstellungsmöglichkeiten.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

@__blackjack__ ich denke mal das sind fundamental 3D Daten, die nicht durch aggregation sinnvoll darstellbar sind.
nezzcarth
User
Beiträge: 1633
Registriert: Samstag 16. April 2011, 12:47

Wenn es nicht unbedingt python sein muss, schlage ich gnuplot vor. Das ist für solche Zwecke seit Jahrzehnten etabliert und kommt mit der Datenmenge gut klar.
G-Rizzle
User
Beiträge: 90
Registriert: Donnerstag 18. Februar 2021, 12:26

Danke nochmal für eure Antworten!

Ich habe mich jetzt für open3d entschieden, eine Bibliothek zum erstellen von Objekten aus großen Pointclouds.

Selbst interaktive Darstellung in 3D ist nahezu ruckelfrei (selbst bei >20,000,000) Punkten möglich
Antworten