in reply to Draw chart

1. use use strict; and  use warnings. Always.

2. Try and fix up your indentation, particularly your %hash assignment list. Currently, it would be very easy for a typo or omission to slip by unnoticed.

3. The add_datafile method says if you're using the set mode flag, then each line in your datafile needs to be an entire dataset. one of the mountain test scripts has this kind of structure, perhaps that may shed some light on what you should be inputing.
my @data = ( ["1st","2nd","3rd","4th","5th","6th","7th", "8th", "9th"], [ 3, 7, 8, 2, 4, 8.5, 2, 5, 9], [ 4, 2, 5, 6, 3, 2.5, 3, 3, 4], [ 7, 3, 2, 8, 8.5, 2, 9, 4, 5], );
My guess is that if you're getting duplicates in your x axis, its becuase you have duplicates in your dataset. I could be wrong, but it looks like the module expects you to already have dealt with duplicates via your own algorithm. (i.e. it doesn't do that part for you...).

Using the test scripts data as an example, each placing has only 1 column. There aren't two 1st's, or two 2nd's, etc.

Replies are listed 'Best First'.
Re^2: Draw chart
by lorenzob (Acolyte) on Apr 30, 2010 at 12:47 UTC

    Hi, below is my dataset. Dates is my x axis and other record is y axis. if you run you can see that y axis numbers are duplicated (two times 0, two times 1).

    29/04/2010-00.00 29/04/2010-00.30 29/04/2010-01.00 29/04/2010-01.30 29 +/04/2010-02.00 29/04/2010-02.30 29/04/2010-03.00 29/04/2010-03.30 29/ +04/2010-04.00 29/04/2010-04.30 29/04/2010-05.00 29/04/2010-05.30 29/0 +4/2010-06.00 29/04/2010-06.30 29/04/2010-07.00 29/04/2010-07.30 29/04 +/2010-08.00 29/04/2010-08.30 29/04/2010-09.00 29/04/2010-09.30 29/04/ +2010-10.00 29/04/2010-10.30 29/04/2010-11.00 29/04/2010-11.30 29/04/2 +010-12.00 29/04/2010-12.30 29/04/2010-13.00 29/04/2010-13.30 29/04/20 +10-14.00 29/04/2010-14.30 29/04/2010-15.00 29/04/2010-15.30 29/04/201 +0-16.00 29/04/2010-16.30 29/04/2010-17.00 29/04/2010-17.30 29/04/2010 +-18.00 29/04/2010-18.30 29/04/2010-19.00 29/04/2010-19.30 29/04/2010- +20.00 29/04/2010-20.30 29/04/2010-21.00 29/04/2010-21.30 29/04/2010-2 +2.00 29/04/2010-22.30 29/04/2010-23.00 29/04/2010-23.30 2 3 1 1 2 2 1 2 2 3 2 1 1 1 1 4 3 3 2 1 2 3 1 1 2 2 1 2 2 3 2 1 1 1 1 +4 3 3 2 1 2 3 1 1 2 2 1 2
      Ok, those duplicates were actually Chart::Mountain trying to be helpful as it had inserted halfticks into the Y axis to try and improve the overall readability of the graph.

      At some point in your travels, you unfortunately brought yourself undone by setting precision => 0, which caused those halfticks to round down, 4.5 to 4, 3.5 to 3 etc...

      What you should be using is 'integer_ticks_only' => 1,.

      I don't know what $popname was sposed to do, so I removed it. And it makes far more sense to declare the graph options in a single list rather than some up top in a separate hash, and others hidden lower down...

      #!/usr/bin/perl use strict; use warnings; use Chart::Mountain; my $filename = $ARGV[0]; my $g = Chart::Mountain->new(1000,500); $g->add_datafile( "$filename", 'set' ); $g->set ( 'title' => 'Video Server Play Daily Hourly + Report', 'grid_lines' => 'true', 'y_label' => 'Numero Streams', 'x_label' => 'Dates', 'include_zero' => 1, 'x_ticks' => 'vertical', 'tick_label_font' => (GD::Font->Giant), 'title_font' => (GD::Font->Giant), 'colors' => {'dataset0' => [0,255,0]}, 'integer_ticks_only' => 1, 'misc' => [0,0,0], ); $g->jpeg ("graph.jpg");

      Data.txt:
      29/04/2010-00.00 29/04/2010-00.30 29/04/2010-01.00 29/04/2010-01.30 29 +/04/2010-02.00 29/04/2010-02.30 29/04/2010-03.00 29/04/2010-03.30 29/ +04/2010-04.00 29/04/2010-04.30 29/04/2010-05.00 29/04/2010-05.30 29/0 +4/2010-06.00 29/04/2010-06.30 29/04/2010-07.00 29/04/2010-07.30 29/04 +/2010-08.00 29/04/2010-08.30 29/04/2010-09.00 29/04/2010-09.30 29/04/ +2010-10.00 29/04/2010-10.30 29/04/2010-11.00 29/04/2010-11.30 29/04/2 +010-12.00 29/04/2010-12.30 29/04/2010-13.00 29/04/2010-13.30 29/04/20 +10-14.00 29/04/2010-14.30 29/04/2010-15.00 29/04/2010-15.30 29/04/201 +0-16.00 29/04/2010-16.30 29/04/2010-17.00 29/04/2010-17.30 29/04/2010 +-18.00 29/04/2010-18.30 29/04/2010-19.00 29/04/2010-19.30 29/04/2010- +20.00 29/04/2010-20.30 29/04/2010-21.00 29/04/2010-21.30 29/04/2010-2 +2.00 29/04/2010-22.30 29/04/2010-23.00 29/04/2010-23.30 2 3 1 1 2 2 1 2 2 3 2 1 1 1 1 4 3 3 2 1 2 3 1 1 2 2 1 2 2 3 2 1 1 1 1 +4 3 3 2 1 2 3 1 1 2 2 1 2

        well, you're right if in your dataset Y axis is composed by little numbers as 1-3-2-4-5-6. if we got in Y axis number like 100-200-300, output jpeg is unreadable because of this option 'integer_ticks_only' => 1,. many thanks for you help