IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Modules Perl Discussion :

[GD::Graph::lines] affichage des coordonnées


Sujet :

Modules Perl

  1. #1
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut [GD::Graph::lines] affichage des coordonnées
    Avec le module GD::Graph::lines y a-t-il moyen de faire apparaitre les coordonnées de chaque point sur le graphique?

    Merci,
    -- Jasmine --

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Si tu souhaites afficher des lignes et des points, il faut utiliser GD::Graph::mixed.
    Tu pourras ainsi afficher tes points et les lignes en même temps.

  3. #3
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Voici un exemple de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    #!/usr/bin/perl
    use warnings;
    use strict;
     
    use GD::Graph::mixed;
     
    my @data = ( 
        [ qw( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec) ],
        [ reverse(4, 3, 5, 6, 3,  1.5, -1, -3, -4, -6, -7, -8)],
        [        (4, 3, 5, 6, 3,  1.5, -1, -3, -4, -6, -7, -8)],
        [        (2, 2, 2, 5, 5,  4.5,1.5,  2,  3,  5,  4,  3)],
    );
     
     
    my $my_graph = new GD::Graph::mixed( 500, 500 );
     
    $my_graph->set( 
    	x_label           => 'positions',
    	y_label           => 'valeurs',
    	title             => "Rap. : Evolution du signal des pics uniques au cours du pyroséquençage",
    	y_max_value       => 16,
    	y_tick_number     => 8,
    	y_label_skip      => 2, 
    	types             => [ qw( points lines points ) ],
    );
     
    $my_graph->set_legend( qw( one two three four ) );
    $my_graph->plot(\@data);
     
            open(OUT, ">point.png") or die $!;
            binmode OUT;
            print OUT $my_graph->gd->png;
            close OUT;

  4. #4
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Ok, merci.

    J'ai simplement modifié GD::Graph::lines en GD::Graph::mixed et j'obtiens le même graphique sauf que pour GD::Graph::lines les valeurs des axes étaient ajustées automatiquement (on ne commençait pas l'échelle à 0 si la plus petite valeur était 10). Comment faire avec GD::Graph::mixed pour obtenir le même effet?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    my $graph = GD::Graph::mixed->new(650, 300);
    $graph->set( types => [qw(linespoints)] );
     
    $graph->set( 
    	x_label           => 'positions',
    	y_label           => 'valeurs',
    	title             => "Rap. $report $run : Evolution du signal des pics uniques au cours du pyroséquençage",
    	y_max_value       => 16,
    	y_tick_number     => 8,
    	y_label_skip      => 2 
    ) or die $graph->error;
    J'ai bien une ligne et les points mais quelles seraient les différences avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $graph->set( types => [qw(lines points)] );
    -- Jasmine --

  5. #5
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Il faut que tu mes donnes un code à tester avec des vrais valeurs.

  6. #6
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Citation Envoyé par djibril Voir le message
    Il faut que tu mes donnes un code à tester avec des vrais valeurs.
    Merci beaucoup, voici le début du code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    #!/usr/local/bin/perl
     
     
    #------------- GD_mixed.pl
     
    use strict;
    use warnings;
     
     
    use GD::Graph::mixed;
    use Statistics::LineFit;
     
     
    =h
    Rapport 1	A1	Nuc
    0	12.33	T
    1	13.53	C
    2	13.49	T
    4	14.22	A
    6	12.89	T
    7	13.04	C
    8	11.81	T
    10	11.23	G
    12	13.44	C
    16	13.29	C
    21	13.2	G
    23	11.85	C
    24	11.45	T
    25	11.14	G
    =cut
     
     
    my $report = 1;
    my $run = 'A1';
     
     
    # recherche de l'équation de la droite
    my $lineFit = Statistics::LineFit->new();
    my @unic_val_position_x = (0, 1, 2, 4, 6, 7, 8, 10, 12, 16, 21, 23, 24, 25);
    my @unic_val_y = (12.33, 13.53, 13.49, 14.22, 12.89, 13.04, 11.81, 11.23, 13.44, 13.29, 13.20, 11.85, 11.45, 11.14);
     
    $lineFit->setData (\@unic_val_position_x, \@unic_val_y) or die "Invalid data";
    my ($intercept, $slope) = $lineFit->coefficients();
    my $rSquared = sprintf ( "%.3f",$lineFit->rSquared());
     
     
     
    # valeurs des points mis sur le graphique
    my @y_values_graph = (12.33, 13.53, 13.49, undef, 14.22, undef, 12.89, 13.04, 11.81, undef, 11.23, undef, 13.44, undef, undef, undef, 13.29, undef, undef, undef, undef, 13.20, undef, 11.85, 11.45, 11.14);
    # lettre à associer à chaque point défini
    my @tag = ('T', 'C', 'T', undef, 'A',undef, 'T', 'C', 'T', undef, 'G', undef, 'C', undef, undef, undef, 'C', undef, undef, undef, undef, 'G', undef, 'C', 'T', 'G');
     
    my @data = ( 
        [0..25],
        \@y_values_graph,
    );
     
     
     
    # x dont le y n'est pas défini : 3, 5, 9, 11, 13, 14, 15, 17, 18, 19, 20, 22  
     
     
     
     
    my $graph = GD::Graph::mixed->new(650, 300);
    $graph->set( types => [qw(linespoints)] );
     
    $graph->set( 
    	x_label           => 'positions',
    	y_label           => 'valeurs',
    	title             => "Rap. $report $run : Evolution du signal des pics uniques au cours du pyroséquençage",
    	y_max_value       => 16,
    	y_tick_number     => 8,
    	y_label_skip      => 2 
    ) or die $graph->error;
     
    $graph -> set(dclrs => ["lred"]);
    my $gd = $graph->plot(\@data) or die $graph->error;
     
    if ($intercept >= 0){
    	print "Y = $slope X +$intercept\nR2 = $rSquared\n";
    }
    else {
    	print "Y = $slope X $intercept\nR2 = $rSquared\n";
    }
     
    # dessin de la droite de régression sur le graphique
     
    my $x1 = 0;
    my $y1 = $intercept;
    my $x2 = 25;
    my $y2 = $slope * 25 + $intercept;
     
     
     
    open(IMG, ">P:/Theorie/Cathy/Myco_pyro/graphiques/Rap${report}_$run.jpg") or die $!;
    binmode IMG;
    print IMG $gd->png;
    Je vais essayer d'ajouter la seconde droite [$x1, $x2], [$y1, $y2] ainsi que les coordonnées en face de chaque point de @data sur le graphique.
    -- Jasmine --

  7. #7
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    J'ai une question au sujet de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    my @data = ( 
        [ qw( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec) ],
        [ qw/ 2 5 2 9/], # ligne 1
        [        (2, 2, 2, 5, 5,  4.5,1.5,  2,  3,  5,  4,  3)],  # ligne 2
    );
    pour la première ligne on donne l'array contenant les valeurs des X ainsi qu'un array avec celles des Y mais pourquoi la seconde ligne n'a-t-elle qu'une seule liste?
    -- Jasmine --

  8. #8
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Je ne comprends pas ta question.

  9. #9
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        [ qw( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec) ],
        [ qw/ 2 5 2 9/], # ligne 1
    les mois sont les valeurs des X et les chiffres les valeurs des Y de la ligne 1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [        (2, 2, 2, 5, 5,  4.5,1.5,  2,  3,  5,  4,  3)]
    ce sont les Y de la ligne 2

    Il faut donc que les valeurs des X soient communes aux 2 lignes et directement donner l'entièreté des X et pas seulement celles de la première ligne. J'ai compris.
    -- Jasmine --

  10. #10
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Voici le script
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    #!/usr/local/bin/perl
     
     
    #------------- GD_mixed.pl
     
    use strict;
    use warnings;
     
     
    use GD::Graph::mixed;
    use Statistics::LineFit;
     
     
    =h
    Rapport 1	A1	Nuc
    0	12.33	T
    1	13.53	C
    2	13.49	T
    4	14.22	A
    6	12.89	T
    7	13.04	C
    8	11.81	T
    10	11.23	G
    12	13.44	C
    16	13.29	C
    21	13.2	G
    23	11.85	C
    24	11.45	T
    25	11.14	G
    =cut
     
     
    my $report = 1;
    my $run = 'A1';
     
     
    # recherche de l'équation de la droite
    my $lineFit = Statistics::LineFit->new();
    my @unic_val_position_x = (0, 1, 2, 4, 6, 7, 8, 10, 12, 16, 21, 23, 24, 25);
    my @unic_val_y = (12.33, 13.53, 13.49, 14.22, 12.89, 13.04, 11.81, 11.23, 13.44, 13.29, 13.20, 11.85, 11.45, 11.14);
     
    $lineFit->setData (\@unic_val_position_x, \@unic_val_y) or die "Invalid data";
    my ($intercept, $slope) = $lineFit->coefficients();
    my $rSquared = sprintf ( "%.3f",$lineFit->rSquared());
     
     
    if ($intercept >= 0){
    	print "Y = $slope X +$intercept\nR2 = $rSquared\n";
    }
    else {
    	print "Y = $slope X $intercept\nR2 = $rSquared\n";
    }
     
    # dessin de la droite de régression sur le graphique
    # on donne les 2 valeurs de Y : pour X = 0 et pour X = 25
    my @y_values_regression;
     
    $y_values_regression[0] = $intercept;
    $y_values_regression[25] = $slope * 25 + $intercept;
     
    # valeurs des points mis sur le graphique
    my @y_values_graph = (12.33, 13.53, 13.49, undef, 14.22, undef, 12.89, 13.04, 11.81, undef, 11.23, undef, 13.44, undef, undef, undef, 13.29, undef, undef, undef, undef, 13.20, undef, 11.85, 11.45, 11.14);
    # lettre à associer à chaque point défini
    my @tag = ('T', 'C', 'T', undef, 'A',undef, 'T', 'C', 'T', undef, 'G', undef, 'C', undef, undef, undef, 'C', undef, undef, undef, undef, 'G', undef, 'C', 'T', 'G');
    # x dont le y n'est pas défini : 3, 5, 9, 11, 13, 14, 15, 17, 18, 19, 20, 22  
     
     
    my $graph = GD::Graph::mixed->new(650, 300);
    $graph->set( types => [qw(linespoints)] );
     
    $graph->set( 
    	x_label           => 'positions',
    	y_label           => 'valeurs',
    	title             => "Rap. : Evolution du signal des pics uniques au cours du pyroséquençage",
    	y_max_value       => 16,
    	y_tick_number     => 8,
    	y_label_skip      => 2, 
    	types             => [ qw( points lines ) ], 
    ) or die $graph->error;
     
     
     
     
    my @data = ( 
        [0..25],
        \@y_values_graph, # valeurs du pyroséquenceur	26 points possibles
        \@y_values_regression # droite de régression	premier et dernier points
    );
     
     
    $graph -> set(dclrs => ["lred"]);
    my $gd = $graph->plot(\@data) or die $graph->error;
     
     
     
    open(IMG, ">P:/Theorie/Cathy/Myco_pyro/graphiques/Rap${report}_$run.jpg") or die $!;
    binmode IMG;
    print IMG $gd->png;
    Cela fonctionne et j'ai bien 2 tracés, peut-on les colorer de façon différente?
    Pour ajouter les coordonnées des points près de chaque point du graphique,comment faire?

    Merci,
    -- Jasmine --

  11. #11
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Citation Envoyé par Jasmine80 Voir le message
    peut-on les colorer de façon différente?
    Faut lire la doc du module Jasmine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $graph -> set( dclrs => [ qw(red green pink blue cyan) ] );
    Citation Envoyé par Jasmine80 Voir le message
    Pour ajouter les coordonnées des points près de chaque point du graphique,comment faire?

    Merci,
    Voir section : Plotting data point values with the data point

  12. #12
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Citation Envoyé par djibril Voir le message
    Faut lire la doc du module Jasmine

    Je ne sais pas. Je sais pas s'il y a moyen de récupérer les coordonnées graphiques de chaque points afin de mettre un texte via gd, faut voir.
    Je suis entrain de chercher dans la documentation comment commencer les axes à une autre valeur que 0, je chercherai pour l'affichage après. Merci pour tes conseils.
    -- Jasmine --

  13. #13
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Voir section : Plotting data point values with the data point pour les valeurs

  14. #14
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Citation Envoyé par Jasmine80 Voir le message
    Je suis entrain de chercher dans la documentation comment commencer les axes à une autre valeur que 0, je chercherai pour l'affichage après. Merci pour tes conseils.
    Ton axe x commence à zéro car tes valeurs commencent à zéro.

  15. #15
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    #!/usr/local/bin/perl
     
     
    #------------- GD_mixed.pl
     
    use strict;
    use warnings;
     
     
    use GD::Graph::mixed;
    use GD::Graph::Data;
    use Statistics::LineFit;
     
     
    =h
    Rapport 1	A1	Nuc
    0	12.33	T
    1	13.53	C
    2	13.49	T
    4	14.22	A
    6	12.89	T
    7	13.04	C
    8	11.81	T
    10	11.23	G
    12	13.44	C
    16	13.29	C
    21	13.2	G
    23	11.85	C
    24	11.45	T
    25	11.14	G
    =cut
     
     
    my $report = 1;
    my $run = 'A1';
     
     
    # recherche de l'équation de la droite
    my $lineFit = Statistics::LineFit->new();
    my @unic_val_position_x = (0, 1, 2, 4, 6, 7, 8, 10, 12, 16, 21, 23, 24, 25);
    my @unic_val_y = (12.33, 13.53, 13.49, 14.22, 12.89, 13.04, 11.81, 11.23, 13.44, 13.29, 13.20, 11.85, 11.45, 11.14);
     
    $lineFit->setData (\@unic_val_position_x, \@unic_val_y) or die "Invalid data";
    my ($intercept, $slope) = $lineFit->coefficients();
    my $rSquared = sprintf ( "%.3f",$lineFit->rSquared());
     
     
    my $legend;
    if ($intercept >= 0){
    	$legend = "Y = $slope X +$intercept          R2 = $rSquared";
    }
    else {
    	$legend = "Y = $slope X $intercept           R2 = $rSquared";
    }
     
    # dessin de la droite de régression sur le graphique
    # on donne les 2 valeurs de Y : pour X = 0 et pour X = 25
    my @y_values_regression;
     
    $y_values_regression[0] = $intercept;
    $y_values_regression[25] = $slope * 25 + $intercept;
     
    # valeurs des points mis sur le graphique
    my @y_values_graph = (12.33, 13.53, 13.49, undef, 14.22, undef, 12.89, 13.04, 11.81, undef, 11.23, undef, 13.44, undef, undef, undef, 13.29, undef, undef, undef, undef, 13.20, undef, 11.85, 11.45, 11.14);
    # lettre à associer à chaque point défini
    my @tag = ('T', 'C', 'T', undef, 'A',undef, 'T', 'C', 'T', undef, 'G', undef, 'C', undef, undef, undef, 'C', undef, undef, undef, undef, 'G', undef, 'C', 'T', 'G');
    # x dont le y n'est pas défini : 3, 5, 9, 11, 13, 14, 15, 17, 18, 19, 20, 22  
     
     
    my $graph = GD::Graph::mixed->new(650, 300);
    $graph->set( types => [qw(linespoints)] );
     
    $graph->set( 
    	x_label           => 'positions',
    	y_label           => 'valeurs',
    	title             => "Rap. : Evolution du signal des pics uniques au cours du pyroséquençage",
    	y_max_value       => 16,
    	y_tick_number     => 8,
    	y_label_skip      => 2, 
    	types             => [ qw( points lines ) ], 
    ) or die $graph->error;
     
     
     
     
    my @data = ( 
        [0..25],
        \@y_values_graph, # valeurs du pyroséquenceur	26 points possibles
        \@y_values_regression # droite de régression	premier et dernier points
    );
     
    # affichage des nucléotides correspondants aux valeurs du pyroséquenceur
    my $data = GD::Graph::Data->new( 
        [0..25],
        \@y_values_graph, # valeurs du pyroséquenceur	26 points possibles
        \@y_values_regression # droite de régression	premier et dernier points
    );
     
    my $values = $data->copy;
    $values->set_y('T', 'C', 'T', undef, 'A',undef, 'T', 'C', 'T', undef, 'G', undef, 'C', undef, undef, undef, 'C', undef, undef, undef, undef, 'G', undef, 'C', 'T', 'G');
    $graph->set(show_values => $values);
     
     
    $graph->set_legend( ( 'données', $legend ) );
    my $gd = $graph->plot(\@data) or die $graph->error;
     
     
     
    open(IMG, ">P:/Theorie/Cathy/Myco_pyro/graphiques/Rap${report}_$run.jpg") or die $!;
    binmode IMG;
    print IMG $gd->png;
    J'obtiens l'erreur :
    Can't call method "copy" on an undefined value at GD_mixed.pl line 99.
    pourtant $data est défini 2 lignes plus haut.

    J'ai du mal à comprendre
    Set this to a GD::Graph::Data object, or an array reference of the same shape, with the same dimensions as your data object that you pass in to the plot method. The reason for this option is that it allows you to make a copy of your data set, and selectively set points to undef to disable plotting of them.
    Si je ne veux annoter que la première série de données (\@y_values_graph) et pas la seconde (@y_values_regression) dois-je quand même passer cette dernière array à $values->set_y?
    -- Jasmine --

  16. #16
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Citation Envoyé par djibril Voir le message
    Ton axe x commence à zéro car tes valeurs commencent à zéro.
    Pour le X mais pas pour le Y. Avec GD::Graph::lines, l'axe Y ne commençait pas à 0 mais été adapté automatiquement et commençait à 11.

    Cf ancien script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    #!/usr/local/bin/perl
     
     
    #------------- GD_line.pl
     
    use strict;
    use warnings;
     
     
    use GD::Graph::lines;
    use Statistics::LineFit;
     
     
    =h
    Rapport 1	A1	Nuc
    0	12.33	T
    1	13.53	C
    2	13.49	T
    4	14.22	A
    6	12.89	T
    7	13.04	C
    8	11.81	T
    10	11.23	G
    12	13.44	C
    16	13.29	C
    21	13.2	G
    23	11.85	C
    24	11.45	T
    25	11.14	G
    =cut
     
     
    my $report = 1;
    my $run = 'A1';
     
     
    # recherche de l'équation de la droite
    my $lineFit = Statistics::LineFit->new();
    my @unic_val_position_x = (0, 1, 2, 4, 6, 7, 8, 10, 12, 16, 21, 23, 24, 25);
    my @unic_val_y = (12.33, 13.53, 13.49, 14.22, 12.89, 13.04, 11.81, 11.23, 13.44, 13.29, 13.20, 11.85, 11.45, 11.14);
     
    $lineFit->setData (\@unic_val_position_x, \@unic_val_y) or die "Invalid data";
    my ($intercept, $slope) = $lineFit->coefficients();
    my $rSquared = sprintf ( "%.3f",$lineFit->rSquared());
     
     
     
    # valeurs des points mis sur le graphique
    my @y_values_graph = (12.33, 13.53, 13.49, undef, 14.22, undef, 12.89, 13.04, 11.81, undef, 11.23, undef, 13.44, undef, undef, undef, 13.29, undef, undef, undef, undef, 13.20, undef, 11.85, 11.45, 11.14);
    # lettre à associer à chaque point défini
    my @tag = ('T', 'C', 'T', undef, 'A',undef, 'T', 'C', 'T', undef, 'G', undef, 'C', undef, undef, undef, 'C', undef, undef, undef, undef, 'G', undef, 'C', 'T', 'G');
     
    my @data = ( 
        [0..25],
        \@y_values_graph,
    );
     
     
     
    # x dont le y n'est pas défini : 3, 5, 9, 11, 13, 14, 15, 17, 18, 19, 20, 22  
     
     
     
     
    my $graph = GD::Graph::lines->new(650, 300);
     
    $graph->set( 
    	x_label           => 'positions',
    	y_label           => 'valeurs',
    	title             => "Rap. $report $run : Evolution du signal des pics uniques au cours du pyroséquençage",
    	y_max_value       => 16,
    	y_tick_number     => 8,
    	y_label_skip      => 2 
    ) or die $graph->error;
     
    $graph -> set(dclrs => ["lred"]);
    my $gd = $graph->plot(\@data) or die $graph->error;
     
    if ($intercept >= 0){
    	print "Y = $slope X +$intercept\nR2 = $rSquared\n";
    }
    else {
    	print "Y = $slope X $intercept\nR2 = $rSquared\n";
    }
     
    # dessin de la droite de régression sur le graphique
     
    my $x1 = 0;
    my $y1 = $intercept;
    my $x2 = 25;
    my $y2 = $slope * 25 + $intercept;
     
     
     
     
    open(IMG, ">P:/Theorie/Cathy/Myco_pyro/graphiques/Rap${report}_$run.jpg") or die $!;
    binmode IMG;
    print IMG $gd->png;
    -- Jasmine --

  17. #17
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    my $data = GD::Graph::Data->new( [ [0..25],\@y_values_graph ]);
    my $values = $data->copy;
    $graph->set(show_values => $values);

  18. #18
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    C'est génial, ça fonctionne Je peux même écrire directement les nucléotides correspondants, c'est encore mieux que les valeurs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    my $data = GD::Graph::Data->new( 
    	[
    	    [0..25],
    	    \@tag, # valeurs du pyroséquenceur	26 points possibles
    	]
    );
     
    my $values = $data->copy;
    $graph->set(show_values => $values);
    J'avais oublié un couple de crochets, c'est pour cette raison que $data n'était pas défini.
    -- Jasmine --

  19. #19
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Pour les axes, options :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    use List::MoreUtils qw(minmax);
    my ($y_min_value,$y_max_value) = minmax(@unic_val_y);
    Et tu rajoutes les options suivantes dans ton constructeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	y_min_value       => $y_min_value,
    	y_max_value       => $y_max_value,

  20. #20
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Voila, problème résolu pour l'axe Y (options y_min_value et y_max_value)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    #!/usr/local/bin/perl
     
     
    #------------- GD_mixed.pl
     
    use strict;
    use warnings;
     
     
    use GD::Graph::mixed;
    use GD::Graph::Data;
     
    use Statistics::LineFit;
    use Statistics::Lite qw(max min );
     
    use POSIX qw(ceil floor);
     
     
    =h
    Rapport 1	A1	Nuc
    0	12.33	T
    1	13.53	C
    2	13.49	T
    4	14.22	A
    6	12.89	T
    7	13.04	C
    8	11.81	T
    10	11.23	G
    12	13.44	C
    16	13.29	C
    21	13.2	G
    23	11.85	C
    24	11.45	T
    25	11.14	G
    =cut
     
     
    my $report = 1;
    my $run = 'A1';
     
     
    # recherche de l'équation de la droite
    my $lineFit = Statistics::LineFit->new();
    my @unic_val_position_x = (0, 1, 2, 4, 6, 7, 8, 10, 12, 16, 21, 23, 24, 25);
    my @unic_val_y = (12.33, 13.53, 13.49, 14.22, 12.89, 13.04, 11.81, 11.23, 13.44, 13.29, 13.20, 11.85, 11.45, 11.14);
     
    $lineFit->setData (\@unic_val_position_x, \@unic_val_y) or die "Invalid data";
    my ($intercept, $slope) = $lineFit->coefficients();
    my $rSquared = sprintf ( "%.3f",$lineFit->rSquared());
     
     
    my $legend;
    if ($intercept >= 0){
    	$legend = "Y = $slope X +$intercept          R2 = $rSquared";
    }
    else {
    	$legend = "Y = $slope X $intercept           R2 = $rSquared";
    }
     
    # dessin de la droite de régression sur le graphique
    # on donne les 2 valeurs de Y : pour X = 0 et pour X = 25
    my @y_values_regression;
     
    $y_values_regression[0] = $intercept;
    $y_values_regression[25] = $slope * 25 + $intercept;
     
    # valeurs des points mis sur le graphique
    my @y_values_graph = (12.33, 13.53, 13.49, undef, 14.22, undef, 12.89, 13.04, 11.81, undef, 11.23, undef, 13.44, undef, undef, undef, 13.29, undef, undef, undef, undef, 13.20, undef, 11.85, 11.45, 11.14);
    # lettre à associer à chaque point défini
    my @tag = ('T', 'C', 'T', undef, 'A',undef, 'T', 'C', 'T', undef, 'G', undef, 'C', undef, undef, undef, 'C', undef, undef, undef, undef, 'G', undef, 'C', 'T', 'G');
    # x dont le y n'est pas défini : 3, 5, 9, 11, 13, 14, 15, 17, 18, 19, 20, 22  
     
    my $y_min_val = floor( min @unic_val_y );
    my $y_max_val = ceil( max @unic_val_y );
     
    my $graph = GD::Graph::mixed->new(650, 300);
    $graph->set( types => [qw(linespoints)] );
     
    $graph->set( 
    	x_label           => 'positions',
    	y_label           => 'valeurs',
    	title             => "Rap. : Evolution du signal des pics uniques au cours du pyroséquençage",
    	y_min_value       => $y_min_val,
    	y_max_value       => $y_max_val,
    	y_tick_number     => 8,
    	y_label_skip      => 2, 
    	types             => [ qw( points lines ) ], 
    ) or die $graph->error;
     
     
    $graph -> set( dclrs => [ qw(red blue) ] );
     
    my @data = ( 
        [0..25],
        \@y_values_graph, # valeurs du pyroséquenceur	26 points possibles
        \@y_values_regression # droite de régression	premier et dernier points
    );
     
    # affichage des nucléotides correspondants aux valeurs du pyroséquenceur
    =h
    Set this to a GD::Graph::Data object, or an array reference of the same shape, with the same
    as your data object that you pass in to the plot method. The reason for this option is that 
    it allows you to make a copy of your data set, and selectively set points to undef  to disable 
    plotting of them.
    =cut
     
    my $data = GD::Graph::Data->new( 
    	[
    	    [0..25],
    	    \@tag, # valeurs du pyroséquenceur	26 points possibles
    	]
    );
     
    my $values = $data->copy;
    $graph->set(show_values => $values);
     
     
    $graph->set_legend( ( 'données du pyroséquenceur', $legend ) );
    my $gd = $graph->plot(\@data) or die $graph->error;
     
     
     
    open(IMG, ">P:/Theorie/Cathy/Myco_pyro/graphiques/Rap${report}_$run.jpg") or die $!;
    binmode IMG;
    print IMG $gd->png;
    Merci pour ton aide.
    -- Jasmine --

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Affichage des coordonnées de souris
    Par azboul dans le forum Développement 2D, 3D et Jeux
    Réponses: 4
    Dernier message: 12/10/2010, 18h14
  2. Réponses: 3
    Dernier message: 31/07/2008, 17h54
  3. Affichage des coordonnées d'un bouton
    Par Premium dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 14/12/2006, 21h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo