Sarat1729 has asked for the wisdom of the Perl Monks concerning the following question:

Hi Monks, Is there a way that I can produce a graph with multiple Y axes in which Y1 should be of different scale and Y2 should be of different scale. Let @Somedata = (1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7) Can someone please explain how the plot(\@Somedata) works in reference to the axes (this is available in GD::Graph module), I mean how the plot consider which element to be taken to which axes.

Replies are listed 'Best First'.
Re: Multiple Y axes with different scales
by poj (Abbot) on Mar 27, 2018 at 07:24 UTC

    If you are using GD::Graph then see use_axis=>[1,2] and two_axes=>1 in section "Options for graphs with axes".

    #!/usr/bin/perl use strict; use GD::Graph::lines; my $graph = GD::Graph::lines->new(400, 300); $graph->set( two_axes => 1, use_axis => [1,2], x_label => 'X Label', y1_label => 'Y1 label', y2_label => 'Y2 label', title => 'Some simple graph', ) or die $graph->error; my @data = ([1,2,3,4,5], [2,3,4,5,6], [17,14,18,16,12] ); my $gd = $graph->plot(\@data) or die $graph->error; open IMG, '>','file.png' or die $!; binmode IMG; print IMG $gd->png;
    poj
Re: Multiple Y axes with different scales
by thanos1983 (Parson) on Mar 27, 2018 at 07:08 UTC

    Hello Sarat1729,

    Are you using a module, if so which one? Sample of code?

    Not everyone can see you problem and try to help you from your point of view without sharing as much information as possible.

    Update your question so can try to assist you as soon as possible. :)

    Update: I found this sample of code from Perl-beginners GD::Graph::bars - multiple x-axis data sets, is this what you are looking for? If so you can modify the y-axis accordingly.

    #!/usr/bin/perl use strict; use warnings; use GD::Graph::mixed; my @data = ( ["1st","2nd","3rd","4th","5th","6th","7th", "8th", "9th"], [3, 4, 14, '', '', '', 7, 20, 15], ['', '', '', 5, 3, 1, 3, 4, 1], ); #sets 3,4 will overwrite second y label my $my_graph = new GD::Graph::mixed( ); $my_graph->set( transparent => '0', x_label => 'X Label', y1_label => 'Y1 label', y2_label => 'Y2 label', title => 'Using two axes', y1_max_value => 40, y2_max_value => 8, y_tick_number => 8, y_label_skip => 2, long_ticks => 1, use_axis => [1,2,1,2], legend_placement => 'BR', x_labels_vertical => 1, x_label_position => 1/2, two_axes => 1, legend_marker_width => 100, l_margin => 10, b_margin => 10, r_margin => 20, t_margin => 10, show_values => 1, ); $my_graph->set_legend( 'X', 'XY', 'diff-X/XY', '95%XY'); my $gd = $my_graph->plot(\@data) or die $my_graph->error; open(IMG, ">Sample.png") or die "$!\n"; binmode IMG; print IMG $gd->png; close IMG;

    Looking forward to your update, BR.

    Seeking for Perl wisdom...on the process of learning...not there...yet!
Re: Multiple Y axes with different scales
by choroba (Cardinal) on Mar 27, 2018 at 07:12 UTC
    What library do you use to plot the graph? There's no plot function in the CORE:: namespace of Perl.

    Note that your question is hard to read as you didn't use the recommended markup:

    @Somedata = ([1,2,3,4,5], [2,3,4,5,6], [3,4,5,6,7]);

    What graph do you expect?

    ($q=q:Sq=~/;[c](.)(.)/;chr(-||-|5+lengthSq)`"S|oS2"`map{chr |+ord }map{substrSq`S_+|`|}3E|-|`7**2-3:)=~y+S|`+$1,++print+eval$q,q,a,