Example of how to set up a horizontal time axis on a BLT graph labelled both with dates and intermediate hour markers, and with the dates centralized with respect to the hours. Execute in wish, and it should look like this:

The ideas used here are:
Version D - Paul Welton - 20.06.2002
package require BLT
pack [blt::graph .g -width 10i]
# Proc passed as a callback to BLT to draw custom tick labels.
#
proc format_timeAxis_tick {win seconds} {
set hour [clock format $seconds -format "%H"]
regsub {^0*} $hour {} label
if { $label eq "" } {
set label 0
}
if {$label} {
return $label
} else {
return "$label\n[string repeat { } $::nSpaces]\
[clock format $seconds -format "%d/%m"]"
}
}
# Construct a list of major tick positions in seconds - the
# month, year and the range of days can be varied to suit
# the application.
#
for {set day 20} {$day <= 23} {incr day} {
foreach hours {0 4 8 12 16 20} {
lappend majorticks [clock scan "3/$day/2001 $hours:00"]
}
}
lappend majorticks [clock scan "3/$day/2001 00:00"]
# Create the graph.
.g axis configure x \
-min [lindex $majorticks 0] \
-max [lindex $majorticks end] \
-title "Day" \
-majorticks $majorticks
# Need to do an update to display the graph before the
# distance can be measured.
update idletasks
# Measure the width of a day on the graph - the example
# dates need not be in the displayed range.
set dayFieldWidth [expr {
[.g axis transform x [clock scan 3/2/2001]] -
[.g axis transform x [clock scan 3/1/2001]]}]
# Work out how many spaces this corresponds to in the
# font for the tick labels.
set nSpaces [expr {$dayFieldWidth /
[font measure [.g axis cget x -tickfont] " "]}]
# Configure the axis to use the custom label command.
.g axis configure x -command format_timeAxis_tickTV Looks cool.
Also works with Refactored BLT Components.
Some minor changes are needed. Do not import the rbc::* commands. The vector needs a subcommand create.
package require rbc
# namespace import rbc::*
# vector and stripchart are blt components.
# if you have a vector v, you can update it in realtime with
# v set $list
# init the vectors to a fixed size.
set Hz 200
rbc::vector create xvec($Hz) vector y1vec($Hz) vector y2vec($Hz)
# fill xvec with 0 .. $Hz-1
xvec seq 0 [expr {$Hz - 1}]
rbc::stripchart .s1 -height 2i -width 8i -bufferelements no
rbc::stripchart .s2 -height 2i -width 8i -bufferelements noSee also BLT