#!pish -f

option add *Background beige
option add *Button.Background red

option add *XYGraph.foreground navyblue
option add *XYGraph.Geometry 150x150
option add *XYGraph.font *New*Century*Bold*R*10* 
option add *XYGraph.legendBackground lightsteelblue 
option add *XYGraph.ShowLegend false
option add *XYGraph.relief flat
option add *XYGraph.borderWidth 4 
option add *XYGraph.numberFont *Courier*Bold*R*8*
option add *Hypertext.Geometry 600x120
option add *Hypertext.Font *Helvetica*Bold*R*14*

proc makegraph { graph title args } {
    xygraph $graph \
	-title $title \
	-xlabel VGS \
	-ylabel IDS 

    eval "$graph config $args"
    set X {
        2.00000e-01 4.00000e-01 6.00000e-01 8.00000e-01 1.00000e+00
        1.20000e+00 1.40000e+00 1.60000e+00 1.80000e+00 2.00000e+00
        2.20000e+00 2.40000e+00 2.60000e+00 2.80000e+00 3.00000e+00
        3.20000e+00 3.40000e+00 3.60000e+00 3.80000e+00 4.00000e+00
        4.20000e+00 4.40000e+00 4.60000e+00 4.80000e+00 5.00000e+00
    }
    $graph insert line1 -xdata $X -y { 
	1.14471e+01 2.09373e+01 2.84608e+01 3.40080e+01 3.75691e+01 
	3.91345e+01 3.92706e+01 3.93474e+01 3.94242e+01 3.95010e+01 
	3.95778e+01 3.96545e+01 3.97313e+01 3.98081e+01 3.98849e+01 
	3.99617e+01 4.00384e+01 4.01152e+01 4.01920e+01 4.02688e+01 
	4.03455e+01 4.04223e+01 4.04990e+01 4.05758e+01 4.06526e+01 
    }  -color purple -linewidth 2 -label 2.0

    $graph insert line2 -xdata $X -y {
	2.61825e+01 5.04696e+01 7.28517e+01 9.33192e+01 1.11863e+02 
	1.28473e+02 1.43140e+02 1.55854e+02 1.66606e+02 1.75386e+02 
	1.82185e+02 1.86994e+02 1.89802e+02 1.90683e+02 1.91047e+02 
	1.91411e+02 1.91775e+02 1.92139e+02 1.92503e+02 1.92867e+02 
        1.93231e+02 1.93595e+02 1.93958e+02 1.94322e+02 1.94686e+02 
    } -color blue -linewidth 0 -symbol diamond -label 3.5

    $graph insert line3 -xdata $X -y { 
       4.07008e+01 7.95658e+01 1.16585e+02 1.51750e+02 1.85051e+02 
       2.16479e+02 2.46024e+02 2.73676e+02 2.99427e+02 3.23267e+02 
       3.45187e+02 3.65177e+02 3.83228e+02 3.99331e+02 4.13476e+02 
       4.25655e+02 4.35856e+02 4.44073e+02 4.50294e+02 4.54512e+02 
       4.56716e+02 4.57596e+02 4.58448e+02 4.59299e+02 4.60151e+02 
    } -color black -label 5.0 -linewidth 2

  bind $graph <Enter> "$graph config -relief sunken" 
  bind $graph <Leave> "$graph config -relief flat" 
}

frame .top
htext .top.msg -text {\
One benefit of a graph widget is that you can present your data in more than
one graph.  In this example, you have small multiples of similar data. In fact,
all the graphs contain the same data.  But you can see where the behavior of a set
of data might be shown in this fashion.  

Hit the %%
button $this.quit -text {Quit} -command {exit} 
$this append $this.quit
%% button when you've seen enough.
}

set cnt 0
for { set row 0 } { $row < 4 } { incr row } {
  set frame .top.f$row
  frame $frame
  for { set col 0 } { $col < 4 } { incr col } {
    incr cnt
    set graph $frame.g$cnt
    makegraph $graph "Plot $cnt"
    pack append $frame $graph { left }
  }
  pack append .top $frame { top }
}

pack append .top .top.msg { top padx 20 pady 10 }
pack append . .top {}
