2016-04-08 7 views
0

Ich habe einen Code erstellt, um ein Diagramm basierend auf einer Spalte mit Werten in einer Textdatei zu erstellen. Diese Werte erscheinen jedoch zu klein, wenn die Grafik im Diagramm angezeigt wird die Textdateien wie folgt aussieht:Passen Sie die Y-Werte vor dem Zeichnen des Diagramms an. Tcl/Tk

0.00 
4.42 
1.10 
0.47 
0.21 
0.51 
0.28 
0.21 
0.01 
0.00 

Wie kann ich meinen Code ändern, so dass ich die Werte durch eine Standardmenge erhöhen kann, bevor der Code die graphische Darstellung trägt?

hier ist mein Code:

package require Tk 

set width 300 
set height 100 
set openFile [open "/fileDirectory/file.txt"] 
set records [read $openFile] 
set data $records 

canvas .c -width $width -height $height 

text .t 
.t insert end $records 

pack .c 
pack .t 

set count 0 

foreach yValue $data { 
    lappend coords \ 
    [expr {$width * $count/double([llength $data])}] \ 
    [expr {$height - $yValue}] 
    incr count 
} 
.c create line $coords 

* Code die Grafik zu erzeugen, ist von here verwiesen

Jede alternative Lösung besser, ohne dass die Y-Werte auf die Leinwand zeigen den ursprünglichen Wert ändern würde auch helfen.

Antwort

0

Bei der weiteren Erforschung der Umwelt Tcl/Tk, fand ich über Gnuplot und das scheint mein Problem in einem Ausmaß zu lösen. Gnuplot passt seine Koordinaten automatisch an die bereitgestellten Daten an.

0

Die Aufgabe, ein Bild auf einem Gerät zu zeigen, braucht mehrere Koordinationen Systeme und mehrere Transformationen:

1) Zunächst müssen Sie das Bild in Weltkoordinaten zu den normalisierten Gerätekoordinaten (Ansichtsfenster) abzubilden. Dies ist die sogenannte Window/Viewport-Transformation.

Die Formel lautet: Xv = [(Xvmax - Xvmin)/(Xwmax - Xwmin)] * (Xw - Xwmin) + Xvmin = Sx * (Xw - Xwmin) + Xvmin = Sx * Xw + Cx

wobei Sx = (Xvmax - Xvmin)/(Xwmax - Xwmin) Cx = Sx * (- Xwmin) + Xvmin

Ähnlich für Y

Yv = [(Yvmax - Yvmin)/(Ywmax - Ywmin)] * (Yw - Ywmin) + Yvmin = Sy * (Yw - Ywmin) + Yvmin = Sy * Yw + Cy (entnommen aus der Referenz unten)

2) Der zweite Schritt ist die Umwandlung in das physische Gerät (Bildschirm, Drucker ....) Das Canvas-Widget kümmert sich darum. Vergrößern oder Verkleinern ist mit der Skalierungsmethode der Arbeitsfläche möglich.

Die Antwort ist, dass Sie zuerst die Window-Viewport-Umwandlung durchführen sollten.

- joachim https://www.siggraph.org/education/materials/HyperGraph/viewing/view2d/pwint.htm