plotdemos3.rb   [plain text]


#!/usr/bin/ruby

require 'tk'
require 'tkextlib/tcllib/plotchart'

###############################
# Set up a strip chart
###############################

Tk::Tcllib::Plotchart::Stripchart.new([0.0, 100.0, 10.0], 
                                      [0.0, 100.0, 20.0], 
                                      :background=>'white', 
                                      :width=>400, :height=>200){|chart|
  title "Aha!"
  pack(:fill=>:both, :side=>:top)

  series1 = Tk::Tcllib::Plotchart::PlotSeries.new(chart)
  series2 = Tk::Tcllib::Plotchart::PlotSeries.new(chart)

  xd = 15.0
  yd = 30.0

  TkTimer.new(500, -1, proc{|obj| # obj --> TkTimer object
                xold, yold = obj.return_value
                xnew = xold + xd
                ynew = yold + (rand() - 0.5) * yd
                ynew2 = yold + (rand() - 0.5) * 2.0 * yd

                series1.plot(xnew, ynew)
                series2.plot(xnew, ynew2)

                obj.stop if xnew >= 200

                [xnew, ynew] # return_value
              }).start(100, proc{ [0.0, 50.0] }) # init return_value
}

###############################
# Set up an isometric plot
###############################
Tk::Tcllib::Plotchart::IsometricPlot.new([0.0, 100.0], [0.0, 200.0], :noaxes, 
                                         :background=>'white', 
                                         :width=>400, :height=>200){|chart|
  pack(:fill=>:both, :side=>:top)
  set_zoom_pan

  chart.plot('rectangle',        [10.0, 10.0, 50.0, 50.0], 'green')
  chart.plot('filled-rectangle', [20.0, 20.0, 40.0, 40.0], 'red')
  chart.plot('filled-circle',    [70.0, 70.0, 40.0], 'yellow')
  chart.plot('circle',           [70.0, 70.0, 42.0])
}

###############################
# Check the symbols
###############################
TkToplevel.new(:title=>'h'){|h|
  Tk::Tcllib::Plotchart::XYPlot.new(h, [0.0, 100.0, 10.0], 
                                       [0.0, 100.0, 20.0], 
                                    :bg=>'white', 
                                    :width=>400, :height=>200){|chart|
    pack(:fill=>:both)

    yconfig(:format=>"%12.2e")

    series1 = Tk::Tcllib::Plotchart::PlotSeries.new(chart, :colour=>'red', 
                                                    :type=>:symbol)
    series2 = Tk::Tcllib::Plotchart::PlotSeries.new(chart, :colour=>'green', 
                                                    :type=>:both)

    x = 5.0
    %w(plus cross circle up down dot upfilled downfilled).each{|sym|
      series1.dataconfig(:symbol=>sym)
      series2.dataconfig(:symbol=>sym)
      series1.plot(x, 50.0)
      series2.plot(x, 20)
      x += 10
    }
  }
}

##############################

Tk.mainloop