#!/usr/bin/perl -w =head1 NAME tsplotv - plot time series given in vertical format =head1 SYNOPSIS tsplotv [--legend-position pos] [--output-format format ] [--stacked] [--style style] [file ...] =head1 DESCRIPTION This program expects time series data in vertical format, I.e., each line contains a tripel . The default legend position is "top right", same as with gnuplot. Another frequently useful position (especially if you have lots of series) is "below. Note that positions which consist of several world (such as "top right" need to be passed to tsplotv as a single argument, so the space needs to be hidden from the shell by use of quotes or a backslash. The default output format is "png", the default style is "lines". See L for a description of possible legend positions, output formats, and styles. The --stacked option causes the time series to be stacked on top of each other. =cut use strict; use TimeSeries; use Getopt::Long; use Pod::Usage; my $help; my $legend_position = 'top right'; my $output_format ='png'; my $stacked = 0; my $style = "lines"; GetOptions('help|?' => \$help, 'legend_position|legend-position=s' => \$legend_position, 'output_format|output-format=s' => \$output_format, 'stacked' => \$stacked, 'style:s' => \$style, ) or pod2usage(2); pod2usage(1) if $help; binmode STDOUT, ':raw'; my %series; my $ns; my %data; my $ts = TimeSeries->new(output_format => $output_format); while (<>) { chomp; my ($timestamp, $series, $value) = split(/\t/); $series{$series} = ++$ns unless ($series{$series}); $data{$timestamp}{$series} = $value; } my @series = sort { $series{$a} <=> $series{$b} } keys %series; $ts->legend(@series); $ts->legend_position($legend_position); $ts->stacked($stacked); $ts->style($style); for my $timestamp (sort keys %data) { my %d = %{$data{$timestamp}}; my @values = @d{@series}; $ts->add_timestring($timestamp, @values); } my $g = $ts->plot(); print $g