The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# IUP::PPlot example

use strict;
use warnings;

use IUP ':all';
use Scalar::Util 'looks_like_number';

sub create_pplot {
  my %args = @_;
  # if we explicitly supply ranges, then auto must be switched off for that direction.
  $args{AXS_YAUTOMIN} = "NO" if defined $args{AXS_YMIN};
  $args{AXS_YAUTOMAX} = "NO" if defined $args{AXS_YMAX};
  $args{AXS_XAUTOMIN} = "NO" if defined $args{AXS_XMIN};
  $args{AXS_XAUTOMAX} = "NO" if defined $args{AXS_XMAX};
  return IUP::PPlot->new(%args);  
}

sub add_series {
  my ($plot, $xvalues, $yvalues, $options) = @_;
  # are we given strings for the x values?
  if (looks_like_number($xvalues->[1])) {
    $plot->PlotBegin(2)->PlotAdd2D($xvalues,$yvalues)->PlotEnd;
  }
  else {
    $plot->PlotBegin(1)->PlotAdd1D($xvalues,$yvalues)->PlotEnd;
  }
  # set any series-specific plot attributes
  if ($options) {
    # mode must be set before any other attributes!
    $plot->DS_MODE(delete $options->{DS_MODE}) if $options->{DS_MODE};
    $plot->SetAttribute(%$options);
  }
}

my $p = create_pplot( TITLE=>"Simple Data", MARGINBOTTOM=>30, MARGINLEFT=>30, AXS_YMIN=>0, GRID=>"YES" );
add_series($p, [0,5,10], [1,6,8], {DS_MARKSTYLE=>"CIRCLE", DS_MODE=>"MARKLINE"} );

my $d = IUP::Dialog->new( TITLE=>"Easy Plotting", SIZE=>"QUARTERxQUARTER", child=>$p );
$d->Show();

IUP->MainLoop();