Avec le module GD::Graph::lines y a-t-il moyen de faire apparaitre les coordonnées de chaque point sur le graphique?
Merci,
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 --
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.
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
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;
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
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?
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
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;
Code : Sélectionner tout - Visualiser dans une fenêtre à part $graph->set( types => [qw(lines points)] );
-- Jasmine --
Il faut que tu mes donnes un code à tester avec des vrais valeurs.
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
Merci beaucoup, voici le début du code :
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.
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;
-- Jasmine --
J'ai une question au sujet de :
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?
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 );
-- Jasmine --
Je ne comprends pas ta question.
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
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
1
2 [ qw( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec) ], [ qw/ 2 5 2 9/], # ligne 1
ce sont les Y de la ligne 2
Code : Sélectionner tout - Visualiser dans une fenêtre à part [ (2, 2, 2, 5, 5, 4.5,1.5, 2, 3, 5, 4, 3)]
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 --
Voici le script
Cela fonctionne et j'ai bien 2 tracés, peut-on les colorer de façon différente?
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;
Pour ajouter les coordonnées des points près de chaque point du graphique,comment faire?
Merci,
-- Jasmine --
Faut lire la doc du module Jasmine
Voir section : Plotting data point values with the data point
Code : Sélectionner tout - Visualiser dans une fenêtre à part $graph -> set( dclrs => [ qw(red green pink blue cyan) ] );
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
Voir section : Plotting data point values with the data point pour les valeurs
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
J'obtiens l'erreur :
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;
pourtant $data est défini 2 lignes plus haut.Can't call method "copy" on an undefined value at GD_mixed.pl line 99.
J'ai du mal à comprendre
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?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.
-- Jasmine --
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 --
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);
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
C'est génial, ça fonctionne Je peux même écrire directement les nucléotides correspondants, c'est encore mieux que les valeurs.
J'avais oublié un couple de crochets, c'est pour cette raison que $data n'était pas défini.
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);
-- Jasmine --
Pour les axes, options :
Et tu rajoutes les options suivantes dans ton constructeur :
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);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 y_min_value => $y_min_value, y_max_value => $y_max_value,
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
Voila, problème résolu pour l'axe Y (options y_min_value et y_max_value)
Merci pour ton aide.
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;
-- Jasmine --
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager