Graphics

# Title: Graphics

The GSL library itself does not include any utilities to visualize computation results. Some examples found in the GSL manual use GNU graph to show the results: the data are stored in data files, and then displayed by using `GNU graph`. Ruby/GSL provides simple interfaces to `GNU graph` to plot vectors or histograms directly without storing them in data files. Although the methods described below do not cover all the functionalities of `GNU graph`, these are useful to check calculations and get some speculations on the data.

## 1 Plotting vectors

`Vector.graph(y[, options])`
`Vector.graph(nil, y[, y2, y3, ..., options])`
`Vector.graph(x, y1, y2, ...., options)`
`Vector.graph([x1, y1], [x2, y2], ...., options)`
`GSL::graph(y[, options])`
`GSL::graph(nil, y[, y2, y3, ..., options])`
`GSL::graph(x, y1, y2, ...., options)`
`GSL::graph([x1, y1], [x2, y2], ...., options)`

  These methods use the `GNU graph` utility to plot vectors. The options options given by a `String`. If `nil` is given for `ARGV[0]`, auto-generated abscissa are used.

  Ex:

      irb(main):007:0> require("gsl")
      irb(main):008:0> x = Vector.linspace(0, 2.0*M_PI, 20)
      irb(main):009:0> c = Sf::cos(x)
      irb(main):010:0> s = Sf::sin(x)
      irb(main):011:0> Vector.graph(x, c, s, "-T X -C -L 'cos(x), sin(x)'")

  This is equivalent to `Vector.graph([x, c], [x, s], "-T X -C -L 'cos(x), sin(x)'")`.

  To create a PNG file,

      irb(main):011:0> Vector.graph(x, c, s, "-T png -C -L 'cos(x), sin(x)' > fig.png")

`GSL::Vector#graph(options)`
`GSL::Vector#graph(x[, options])`

  These methods plot the vector using the GNU `graph` command. The options for the `graph` command are given by a `String`.

  Ex1:

      irb(main):011:0> x = Vector[1..5]
      [ 1.000e+00 2.000e+00 3.000e+00 4.000e+00 5.000e+00 ]
      irb(main):014:0> x.graph("-m 2")      # dotted line
      irb(main):012:0> x.graph("-C -l x")   # color, x log scale
      irb(main):015:0> x.graph("-X \"X axis\"")  # with an axis label

  Ex2: x-y plot

      irb(main):007:0> require("gsl")
      irb(main):008:0> x = Vector.linspace(0, 2.0*M_PI, 20)
      irb(main):009:0> c = Sf::cos(x)
      irb(main):010:0> c.graph(x, "-T X -C -g 3 -L 'cos(x)'")

## 2 Drawing histogram

`GSL::Histogram#graph(options)`
  This method uses the GNU plotutils `graph` to draw a histogram.

## 3 Plotting Functions

`GSL::Function#graph(x[, options])`

  This method uses `GNU graph` to plot the function self. The argument x is given by a `GSL::Vector` or an `Array`.

  Ex: Plot sin(x)

      f = Function.new { |x| Math::sin(x) }
      x = Vector.linspace(0, 2*M_PI, 50)
      f.graph(x, "-T X -g 3 -C -L 'sin(x)'")

## 4 Other way

The code below uses `GNUPLOT` directly to plot vectors.

    #!/usr/bin/env ruby
    require("gsl")
    x = Vector.linspace(0, 2*M_PI, 50)
    y = Sf::sin(x)
    IO.popen("gnuplot -persist", "w") do |io|
      io.print("plot '-'\n")
      x.each_index do |i|
        io.printf("%e %e\n", x[i], y[i])
      end
      io.print("e\n")
      io.flush
    end

prev

Reference index top