Wertegrafik erstellen Teil 2

Dieser Artikel startet mit dem Skript graphDE.py, wir erstellen ein neues Skript graph2DE.py  mit zusätzlichen Funktionen.

graphDE.py erstellt eine einfache Grafik mit x- und Y-Achsen, Achsenbeschriftungen und einem Titel. Mit graph2DE.py fügen wir die Möglichkeit eine Größe für die Achsen anzugeben hinzu, erstellen Strichzeichen mit benutzerdefinierten Abständen auf den Achsen und fügen eine Info über die typographischen Merkmale der Grafik ein.

Neue Abfrage/Eingabeboxen
xrange = int(scribus.valueDialog('Maximaler Wert X-Achse', 'Maximalen Wert der X-Achse (Größe) eingeben')) xmark = int(scribus.valueDialog('Strichzeichen-Intervall X-Achse', 'Strichzeichen-Intervall für X-Achse eingeben')) Die erste Zeile erfrägt den Maximalwert der X-Achse (eine Größeneinheit muß nicht angegeben werden – es wird die Größeneinheit der Grafik verwendet), der in einen Integer-Wert konvertiert werden muß. Die zweite Zeile erfrägt die Anzahl Einheiten zwischen den Strichzeichen auf der X-Achse.

Daraus können wir die typographische Größe für unsere Grafik berechnen, basierend auf der Tatsache daß wir die Größe der Grafik mit der Variablen xaxis gesetzt haben: xscale = xaxis/xrange # ergibt die typographischen Punkte pro Dateneinheit Nun können wir die Strichzeichen mit einer While-Schleife erzeugen: while (xtick < (xorigin + xaxis)): xt = scribus.createLine(xtick, yorigin, xtick, yorigin - 10) scribus.setLineWidth(t, xt) scribus.setLineColor(color, xt) scribus.setFillColor(color, xt) xtick = xtick + xmark * xscale Diese Strichzeichen erscheinen über der Achsenlinie, sollen sie unter der Achsenlinie erscheinen dann ändere -10 in +10. Als Hilfe fügen wir noch einen Textrahmen mit den Seitenabmessungen hinzu. Dieser Textrahmen ist als Hilfe gedacht um weitere Elemente mit Scribus hinzuzufügen, und wir haben gleichzeitig eine Erinnerungshilfe welche Einstellungen gesetzt wurden: caption = "Größe dieser Grafik\n\n" "X: " + str(xmark) + "Einheiten/Strichzeichen\n" + "Y: " caption = caption + str(ymark) + "Einheiten/Strichzeichen\n" + str(xscale) + " pt/Einheit (X)\n" caption = caption + str(yscale) + " pt/Einheit (Y)" S = scribus.createText(200, 120, 150, 80) scribus.setTextColor("Blue", S)   scribus.setText(caption, S)    scribus.setTextAlignment(1, S)    scribus.setFont("Times New Roman Bold", S)    scribus.setFontSize(8, S)
 * 1) diese Zeilen können zu einer zusammengefaßt werden

Script: graph2DE.py

 * 1) !/usr/bin/env python


 * 1) File: graph2.py
 * 2) originally 2006.05.17
 * 3) this version 2006.05.18
 * 4) Gregory Pittman
 * 5) creates basic graph with axis labels
 * 6) graphDE.py
 * 7) erzeugt eine Grafik mit Titel und Achsenbezeichnungen
 * 8) Übersetzung der Captions, Meldungstexte und Kommentare
 * 9) 17. Februar 2007 von Uchiki

import scribus

xorigin = 150     # x-Ursprung der Grafik yorigin = 450    # y-Ursprung der Grafik xaxis=400     #Länge der X-Achse yaxis=350     #Länge der Y-Achse color="Black" a = 1.5 # Linienstärke für Achsen t = 0.8 # Linienstärke für Strichzeichen if scribus.haveDoc: title = scribus.valueDialog('Titel','Titel für Grafik eingeben') xlabel = scribus.valueDialog('Beschriftung X-Achse','Beschriftung für X-Achse eingeben') ylabel = scribus.valueDialog('Beschriftung Y-Achse','Beschriftung für Y-Achse eingeben') xrange = int(scribus.valueDialog('Maximaler Wert X-Achse', 'Maximaler Wert für X-Achse (Größe) eingeben')) xmark = int(scribus.valueDialog('Strichzeichen-Intervall', 'Strichzeichen-Intervall für X-Achse eingeben')) xtick = xorigin xscale = xaxis/xrange # ergibt die typographischen Punkte pro Dateneinheit yrange = int(scribus.valueDialog('Maximaler Wert Y-Achse', 'Maximaler Wert für Y-Achse (Größe) eingeben')) ymark = int(scribus.valueDialog('Strichzeichen-Intervall', 'Strichzeichen-Intervall für X-Achse eingeben')) ytick = yorigin yscale = yaxis/yrange # ergibt die typographischen Punkte pro Dateneinheit scribus.setRedraw(1) scribus.setUnit(0) d = scribus.createLine(xorigin,yorigin,xorigin+xaxis,yorigin) # erstellt X-Achse scribus.setLineWidth(a, d)   scribus.setLineColor(color, d)    scribus.setFillColor(color, d)    e = scribus.createLine(xorigin,yorigin,xorigin,yorigin-yaxis) # erstellt Y-Achse scribus.setLineWidth(a, e)   scribus.setLineColor(color, e)    scribus.setFillColor(color, e)    xtick = xtick + xmark * xscale ytick = ytick - ymark * yscale while (xtick < (xorigin + xaxis)): xt = scribus.createLine(xtick, yorigin, xtick, yorigin - 10) # erstellt die Strichzeichen auf der X-Achse scribus.setLineWidth(t, xt) scribus.setLineColor(color, xt) scribus.setFillColor(color, xt) xtick = xtick + xmark * xscale while (ytick > (yorigin - yaxis)): yt = scribus.createLine(xorigin, ytick, xorigin + 10, ytick) # erstellt die Strichzeichen auf der Y-Achse scribus.setLineWidth(t, yt) scribus.setLineColor(color, yt) scribus.setFillColor(color, yt) ytick = ytick - ymark * yscale T = scribus.createText(60, 45, 500, 60) # Titel in roter Schrift mit Rahmen scribus.setTextColor("Red", T)   scribus.setText(title, T)    scribus.setTextAlignment(1, T)    scribus.setFont("Times New Roman Bold", T)    scribus.setFontSize(28, T)    XL = scribus.createText(xorigin, yorigin + 20, 400, 40) # Beschriftung X-Achse scribus.setText(xlabel, XL) scribus.setTextAlignment(1, XL) scribus.setFont("Times New Roman Bold", XL) scribus.setFontSize(20, XL) YL = scribus.createText(90, 450, 350, 40) # Beschriftung Y-Achse scribus.setText(ylabel, YL) scribus.setTextAlignment(1, YL) scribus.setFont("Times New Roman Bold", YL) scribus.setFontSize(20, YL) scribus.rotateObject(90,YL) caption = "Größe dieser Grafik\n\n" "X: " + str(xmark) + "Einheiten/Strichzeichen\n" + "Y: " caption = caption + str(ymark) + "Einheiten/Strichzeichen\n" + str(xscale) + " pt/Einheit (X)\n" caption = caption + str(yscale) + " pt/Einheit (Y)" S = scribus.createText(200, 120, 150, 80) # erstellt den Info-Textrahmen mit blauer Schrift scribus.setTextColor("Blue", S)   scribus.setText(caption, S)    scribus.setTextAlignment(1, S)    scribus.setFont("Times New Roman Bold", S)    scribus.setFontSize(8, S)
 * 1) diese Zeilen können zu einer zusammengefaßt werden

scribus.redrawAll