in reply to How do I make a histogram Question?

It seems from the documentation that
my $h = gsl_histogram_alloc 3; gsl_histogram_set_ranges $h, [0, 41, 61, 100], 4; gsl_histogram_increment $h, $_ for @values;
will do what you like, whereupon the histogram can be printed using gsl_histogram_fprintf or gsl_histogram_fscanf. (I don't understand why gsl_histogram_set_ranges needs that final argument, since it can be figured automatically once $h is known; but the documentation says it does, and I am not in a position to test.)

(Boy, gotta love those flat namespaces. I'll bet it's fun to call these functions as Math::GSL::Histogram::gsl_histogram_xxx.)

Replies are listed 'Best First'.
Re^2: How do I make a histogram Question?
by Niner710 (Sexton) on Jan 28, 2009 at 02:22 UTC
    Ok, thanks for the help. I was trying to use your code and do a

    gsl_histogram_fscanf($stream, $h)

    What is the $stream? I read it has been opened by the gsl_fopen_function from the Math::GSL module. Does that mean it is already predefined and I don't have to define it myself. I get a compile error.
      The simple answer is that you need first to run
      my $stream = Math::GSL::gsl_fopen $file, $mode;
      The complicated answer is that gsl_fopen is defined in Math::GSL, which uses the fopen function from Math::GSL::Vector (for some reason), which is an alias of Math::GSL::Vectorc::fopen, whose definition I can't find—so I can't tell you anything but the obvious about $file, and nothing at all about $mode, except that it can end in +b.

      For future reference, it would have been perfectly OK to continue our discussion in the Chatterbox.

        Thanks for your help JadeNB. Hmm, I added that but I get a unhandled win32 exception. Here is the code that I have.
        use Math::GSL::Histogram qw/:all/; use Math::GSL; $file = "blah.txt"; $mode = 1; $h = gsl_histogram_alloc(3); gsl_histogram_set_ranges($h, [0, 41, 61, 100], 4); gsl_histogram_increment ($h, 0); gsl_histogram_increment ($h, 41); gsl_histogram_increment ($h, 61); gsl_histogram_increment ($h, 100); $stream = Math::GSL::gsl_fopen $file, $mode; gsl_histogram_fscanf($stream, $h);
        How am I doing this wrong?