Plots für 3d-Surface -> Library mit minimalen Abhängigkeiten

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
max_bodo
User
Beiträge: 3
Registriert: Dienstag 11. September 2018, 09:29

Hi Leute,

bin froh, dass ich dieses Forum hier gefunden habe, und hoffe, mir kann jmd. weiterhelfen.

Gleich Vorweg:
Ich habe bereits viel recherchiert aber bin einfach auf keine anständige Lösung gestoßen, dazu aber später mehr.

Das Problem:
Ich möchte aus CSV-Daten viele 3d Surface-Plots erstellen und als jpg oder png speichern (ca. 100-500 Stück pro Toolrun) und das Tool später als .exe an meine Kommilitonen weitergeben, da dort niemand Python kennt / installiert hat. Dazu nutze ich PyInstaller. Leider fällt damit alles, was auf NumPy, Pandas, Matplotlib o.ä. basiert, schon mal raus, weil sonst die Dateigröße der .exe-Datei ins Unermessliche steigt. Die .exe hat derzeit 6MB (Python Interpreter und eben 1, 2 .py-Files), ich möchte diese so klein wie möglich halten. Die Plots sollen in etwa so aussehen: http://www.robertocolistete.net/Python/ ... olored.png

Also suche ich eine Library, mit der ich solche SurfacePlots erstellen kann, die aber möglichst wenige Dependencies hat bzw. insgesamt nicht so überladen ist wie u.a. Matplotlib. Ich habe mir bereits viele angeschaut, leider bin ich noch immer nicht fündig geworden:

* Bokeh -> Super, jedoch kann ich die Plots nur über den Umweg Selenium als JPG/PNG exportieren, da die Library eigentlich dazu gedacht ist, alles als HTML auszugeben und den Browser mittels Javascript den Plot erstellen zu lassen. Fällt damit leider weg. Ich kann schlecht die komplette Selenium-Umgebung inkl Browser-Driver in meine .exe einbinden
* Plotly: Super Library, leider kann die Offlineversion nicht direkt aus Python heraus als PNG/JPG speichern. Auch hier gilt das gleiche wie bei Bokeh: Nur als HTML-Datei im Browser :(
* ggplot: Basiert leider wieder auf Pandas, SciPy, Matplotlib, Numpy...

Kennt jmd. eine Library, die so etwas bewerkstelligen könnte?
Oder hat jmd. eine andere Idee? Ich nehme an, es ist nicht möglich, nur die für Surface3d Plots benötigten Dependencies aus Matplotlib herauszutrennen und mit in meine .exe aufzunehmen oder?

Danke vorab!
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich kenne keine Bibliothek jenseits der von dir genannten. Ich muss gestehen, wieso du im Zeitalter der Terabyte-Platten selbst in Notebooks dir da solchen Kopf um die Anwendungsgroesse machst erschliesst sich mir nicht, aber wenn das fuer dich nicht verhandelbar ist: ggf. kannst du gnuplot einbetten. Also wirklich als executable. Dessen Installer ist auf meinem Mac gerade mal 2MB gross.
max_bodo
User
Beiträge: 3
Registriert: Dienstag 11. September 2018, 09:29

Danke für Deine Antwort.

Das Problem ist, das Tool macht eigentlich noch viel viel mehr, und ist wie gesagt derzeit nur 6MB groß.

Das Plotting-Feature ist eigentlich eher nur als "Nice 2 Have" zu erachten, deswegen möchte ich eben die Dateigröße ungern auf das X-fache explodieren lassen, nicht nur wegen der ganzen Fragezeichen im Kopf der Anwender, auch weil das Entpacken der .exe ins Tempverzeichnis nach meinen Erfahrungen ein wenig länger dauert, d.h. man schon die Verzögerung merkt, bis erst das CMD Fenster startet.

Das mit gnuplot ist eine gute Idee, daran hatte ich gar nicht gedacht. Ich werde mir mal anschauen, wie die API aufgebaut ist und ob ich die exe "easy" von extern mit meinen zu plottenden Daten speisen kann 8) Danke schon mal für die Idee!!
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Meh, wir leben in Zeiten der 60-Sekuendigen Flash-Messages bei Programmstart (unsere eigen Anwendung macht das...). Nicht, dass das *toll* waere. Aber Python ist generell nicht soooo schnell, und die Maechtigkeit von Python selbst, und vielen seiner Bibliotheken, kommt eben zu einem gewissen Preis.

Ich wuerde mir da weniger Kopp machen. Die Energie, die du in eine proprietaere Loesung steckst, ohne das fuer den Benutzer da wirklich Mehrwert bei rumkommt, ist ggf. besser investiert in Features, die deine Freunde wollen. Natuerlich wollen die blitzschnelles starten, wenn du sie danach fragst. Wichtiger ist, ob sie sich *beschweren*, wenn es etwas laenger dauert. Da habe ich Zweifel.
max_bodo
User
Beiträge: 3
Registriert: Dienstag 11. September 2018, 09:29

Hast auch wieder recht :-)
Ich werde mal schauen, ob ich das mit einer geeigneten Pyinstaller-Spec Datei hinbekomme, möglichst wenig "Dependencies" von Matplotlib in die .exe zu entpacken, sodass gerade so das JPG generiert werden kann (die ganzen Backends und TKinder für die GUI von Matplotlib beim Anzeigen von Plots zB brauche ja möglicherweise nicht, da mein Tool nicht direkt das Figure-Fenster anzeigen soll, sondern eben nur die JPGs abspeichern soll).

Mal schauen, ob das so klappt :-)
Danke auf jeden Fall schon mal!
Antworten