Version 1 of BLT - graph - create a horizontal label for a vertical axis

Updated 2002-06-30 21:53:33

Example of how to set up a vertical axis on a BLT graph labelled with a horizontal label. Achieved by ignoring the "label" option of the axis method, which would give a vertical label, and tacking the label onto one of the tick labels instead. Execute in wish, and it should look like this:

http://www.crossrad.uklinux.net/blt_pdw_240602.png

Version A - Paul Welton - 24.06.02

    package require BLT

    pack [blt::graph .g]

    #  Proc passed as a callback to BLT to draw custom tick labels.
    #
    proc format_yAxis_tick {win value} {
        if {$value == [$win axis cget y -max]} {
            set yAxisHeightPixels [expr {abs (
                [$win axis transform y [$win axis cget y -max]] -
                [$win axis transform y [$win axis cget y -min]])}]

            set font [$win axis cget y -tickfont]

            set yAxisHeightLines  [expr {$yAxisHeightPixels /
                [font metrics $font -linespace]}]

            set v [string repeat "\n" [expr {$yAxisHeightLines / 2}]]
            set h [string repeat " "  [expr {
                [font measure $font "$::y_title           "] /
                [font measure $font " "]}]]
            return "$v$h$value$v$::y_title"
        } else {
            return $value
        }
    }

    #  The following global is used by the callback "format_yAxis_tick".
    set y_title "Y axis title"

    #  Configure the vertical axis.
    .g axis configure y -min 0 -max 100 -majorticks     \
            {0 10 20 30 40 50 60 70 80 90 100}

    #  Need to force the graph to be drawn before distances can be
    #  measured.
    update

    .g axis configure y -command format_yAxis_tick