Bild und Text auf eine Seite

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
Benutzeravatar
Ede1994
User
Beiträge: 72
Registriert: Dienstag 2. Mai 2017, 12:41

Hallo.
Ich würde gerne eine Seite erstellen z.B. im pdf-Format welche wie folgt aufgebaut sein soll:

Code: Alles auswählen

Name:
Uhrzeit:
----
PLOT
----
Frame 1: 1
Frame 2: 2
.
.
Frame n: 3
Also zwischen zwei Textblöcken soll ein Plot eingefügt werden. Wie man alles einzeln in ein File schreibt weiß ich. Ich habe bis jetzt das:

Code: Alles auswählen

file = open('Frames/Frames2_' + NAME[0] + '.pdf','w')

file.write('Patient Name'+ ': ' + NAME[0])	#print patient name
file.write('\nTime: ' + time)					#print time Duration


file.write('\n\nsublists_threshold:')	#print sublists_threshold
for value, counter in zip(timesteps_threshold, count(1)):
	file.write('\nFrame {}: {}'.format(counter, value)) 

file.close()
Aber wie bekomme ich da jetzt noch ein Bild rein!?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das ist kein PDF, nur weil du die Endung so benennst. Dazu muss das Format stimmen, und um so etwas zu machen gibt es zB ReportLab, mit dem man PDF-Dateien erzeugen kann.
Benutzeravatar
Ede1994
User
Beiträge: 72
Registriert: Dienstag 2. Mai 2017, 12:41

Ja das war mir soweit klar, mir ging es auch eher um die Möglichkeit den Plot z.B. mittels mathplotlib mit in das File einzubinden. ReportLab kannte ich bisher nicht. Gibt es sonst noch eine Möglichkeit?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Hast du nach einer gesucht? Und was an reportlab gefällt dir nicht?
Benutzeravatar
Ede1994
User
Beiträge: 72
Registriert: Dienstag 2. Mai 2017, 12:41

Ich hab es erst mit matplotlib.backends.backend_pgf probiert. Aber ich hab mich jetzt mit reportlab beschäftigt, ich probiere es einfach mal aus. Bei weiteren Fragen melde ich mich einfach wieder :D
Benutzeravatar
__blackjack__
User
Beiträge: 14047
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Ede1994: Du baust da mit `zip()` und `count()` die `enumerate()`-Funktion nach.

Das Du *Zeilenenden* immer am *Anfang* eines Schreibvorgangs setzt ist auch etwas komisch und führt hier zu einer Datei bei der die letzte Zeile nicht mit einem Zeilenendezeichen abgeschlossen ist.

Zwei literale Zeichenketten mit ``+`` zu Verbinden macht keinen Sinn.

Die Kommentare erscheinen extrem sinnlos.

Textdateien sollte man immer mit einer Kodierung öffnen.

Ungetestet:

Code: Alles auswählen

    with open(
        "Frames/Frames2_{}.pdf".format(NAME[0]), "w", encoding="utf-8"
    ) as file:
        file.write(
            "Patient Name: {}\n"
            "Time: {}\n\n"
            "sublists_threshold:\n".format(NAME[0], time)
        )
        for frame_number, value in enumerate(timesteps_threshold, 1):
            file.write("Frame {}: {}\n".format(frame_number, value))
In eine Textdatei kann man keine Grafik speichern, zumindest nicht solange die nicht nur aus (Unicode-)Zeichen besteht. Einfache Plots sind so natürlich möglich, zum Beispiel Balkendiagramme oder auch Scatterplots. Natürlich mit einer nicht besonders hohen Auflösung. Es gibt ein paar Implementierungen in Python wie `aplotter`, `bashplotlib`, oder `asciichartpy`. ``gnuplot`` als externes Programm kann das auch.

ReportLab ist so etwas wie die Standardlösung wenn man in Python PDFs erzeugen möchte und nicht den Umweg über LaTeX gehen mag. Ansonsten könntest Du auch überlegen eine HTML-Ausgabe zu programmieren. Da kann man ja auch leicht Grafiken einbinden. Kommt halt so ein bisschen darauf an, was das Ziel ist.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Benutzeravatar
Ede1994
User
Beiträge: 72
Registriert: Dienstag 2. Mai 2017, 12:41

Okay. Danke für die Hinweise!
Hab es jetzt mit reportlab gelöst und enumerate mit eingearbeitet! Jetzt ist alles so wie es sein soll :D
Antworten