Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > SAS > ODS et reporting
ODS et reporting Forum d'entraide sur les fonctionnalités de reporting de SAS : gérer les sorties et graphiques de SAS
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/02/2011, 13h56   #1
Membre habitué
 
Inscription : janvier 2005
Messages : 527
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 527
Points : 134
Points : 134
Par défaut Graphique: points se chevauchent => etirer le graphique ?

Bonjour,

Encore moi ... Je n'aurai pas arrêté de vous embeter cette semaine et la journée n'est pas finie...

Suite à mes précédents messages dans d'autres sous-forums, j'ai un graphique avec des points et quand j'approche la souris, les coordonnées du point apparaissent (merci Olivier ). Le problème est que la plupart de ces points sont regroupés sur un endroit, et on n'arrive plus à les distinguer.

J'ai parcouru le forum et vu notamment ces 2 posts:
dimension graphique odshtml et reporting zoom graphique.

Je ne souhaite pas avoir à utiliser le where et à générer plusieurs graphiques. J'ai donc tenté les options xpixels et ypixels. ça marche presque mais j'en suis à mettre xpixels=ypixels=10000 =>
- certains points se chevauchent encore
- le graphique est immense et il faut les ascenseurs pour le parcourir

Y a t il une autre manière "d'étirer le graphe en vertical" afin de bien distinguer les différents points sans rendre le graphique trop grand ?

Si ce n'est pas possible, est il possible de mettre une couleur différente pour chaque point ?

Merci de votre aide.
debdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 14h04   #2
Membre Expert
 
Homme
Biostatisticien
Inscription : juin 2009
Messages : 1 143
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Irlande

Informations professionnelles :
Activité : Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : juin 2009
Messages : 1 143
Points : 1 760
Points : 1 760
Dans les goptions tu peux utiliser xmax et ymax pour redimensionner ton graph. A toi après de jongler avec les valeurs pour obtenir la sortie que tu souhaites

La couleur des points peut être gérée par un annotate.

Manoutz
Manoutz est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 18/02/2011, 14h53   #3
Membre habitué
 
Inscription : janvier 2005
Messages : 527
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 527
Points : 134
Points : 134
Salut Manoutz,

Je viens de tester ymax mais c'est le meme principe que ypixel: si je veux bien distinguer tous les points, il faut que je fasse un immense graphique.

Je vais revenir sur ce que j'ai dit et je vais faire un sous graphique (zoom du graphique principal) en utilisant un where.

Merci
debdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 15h06   #4
Expert Confirmé
 
Avatar de olivier.decourt
 
Homme Olivier Decourt
Formateur en informatique
Inscription : avril 2008
Messages : 1 467
Détails du profil
Informations personnelles :
Nom : Homme Olivier Decourt
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Formateur en informatique
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 1 467
Points : 2 823
Points : 2 823
Si c'est toujours le graphique avec des infobulles, tu peux associer à tous les points d'une zone un lien hypertexte : quand on cliquera sur cette zone du graphique, on ouvrira une autre page Web avec l'image zoomée.
Les infobulles avaient un texte commençant par TITLE, pour un lien il faut commencer par HREF="nom de la page.htm" ; mettre les deux dans la même variable texte, et zou ! le tout dans l'option HTML de la proc GPLOT.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
DATA work.air ;
  SET sashelp.air ;
  LENGTH bulle $ 200 ;
  bulle = CATS("TITLE=",QUOTE(PUT(date, DDMMYY10.))) ;
  IF 1952 <= YEAR(date) <= 1954 THEN bulle=CATS(bulle," HREF='detail_graph.htm'") ;
RUN ;
ODS HTML FILE="c:\temp\main_graph.htm" GPATH="c:\temp" (URL=NONE) ;
PROC GPLOT DATA=work.air ;
  PLOT air * date / HTML=bulle ;
RUN ; QUIT ;
ODS HTML CLOSE ;
ODS HTML FILE="c:\temp\detail_graph.htm" GPATH="c:\temp" (URL=NONE) ;
PROC GPLOT DATA=work.air (WHERE=(YEAR(date) BETWEEN 1952 AND 1954)) ;
  PLOT air * date / HTML=bulle ;
RUN ; QUIT ;
ODS HTML CLOSE ;
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 15h41   #5
Membre habitué
 
Inscription : janvier 2005
Messages : 527
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 527
Points : 134
Points : 134
Je viens de voir ta réponse Olivier. Je teste tout ça lundi (parce que là, j'vais partir en week end )

Merci.
Bon week end !
debdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2011, 08h16   #6
Membre habitué
 
Inscription : janvier 2005
Messages : 527
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 527
Points : 134
Points : 134
Bonjour,

Nouvelle semaine... et nouveau problème...

J'ai testé le code pour l'hyperlien et ça fonctionne très bien , merci.
Néanmoins, je me suis rendue compte d'un petit problème que j'ai dans mes données. Non seulement j'ai des points sur le graphique qui se chevauchent (et le zoom permet de les distinguer donc problème réglé), mais j'ai également des points qui ont exactement les mêmes coordonnées: je n'ai qu'une infobulle qui apparait.

Est il possible d'afficher toutes les infobulles pour un même point ?
Ou bien une seule infobulle qui regroupe toutes les informations ?
Est ce que l'annotate peut être une solution ? Je ne sais pas exactement comment ça marche donc je vais aller lire de la doc.

Merci pour votre aide.
debdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2011, 08h41   #7
Membre habitué
 
Inscription : janvier 2005
Messages : 527
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 527
Points : 134
Points : 134
Je viens de penser à une autre idée que j'essaie de développer en ce moment. C'est de compter le nombre de bulles qui ont exactement les memes coordonnées. Quand le compte est > 1, pour chacunes des coordonnées identiques, je mets bout à bout le texte de la bulle.

L'idée vous parait elle bonne ?
Je me lance là dessus pour l'instant.
debdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2011, 10h20   #8
Expert Confirmé
 
Avatar de olivier.decourt
 
Homme Olivier Decourt
Formateur en informatique
Inscription : avril 2008
Messages : 1 467
Détails du profil
Informations personnelles :
Nom : Homme Olivier Decourt
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Formateur en informatique
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 1 467
Points : 2 823
Points : 2 823
Salut.
Oui, l'idée d'agréger par coordonnées proches ou exactement identiques me semble prometteuse.
Par contre, pour "ranger" un peu le texte dans tes bulles, il faudrait y inclure des retours à la ligne. Et là, c'est le hic.
Si tu regardes la page Web avec Internet Explorer, pas de souci : tu inclus des retours à la ligne avec la chaîne dans ta variable texte. Mais avec Firefox, pas moyen (je viens de vérifier sur des forums HTML et l'avis est unanime).
Attention donc, si tu as beaucoup de texte à afficher dans ta bulle, ça va vite être le souk sous Firefox !
Bon courage.
Olivier

PS : en cadeau bonus, une petite application (regarder le résultant avec IE pour voir le retour à la ligne) qui intègre une jolie manière de programmer sans RETAIN ni IF THEN ELSE, la boucle Whitlock ou DOW-loop.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
PROC SORT DATA=sashelp.class OUT=work.debDev ;
  BY age sex ;
RUN ;
DATA work.debDev ;
  LENGTH bulle $ 1000 ;
  bulle="TITLE='" ;
  DO UNTIL(LAST.sex) ;
    SET work.debDev ;
	BY age sex ;
	bulle = CATT(bulle,name," poids=",weight,"&#13;") ;
  END ;
  bulle=CATT(bulle,"'") ;
RUN ;
ODS HTML FILE="c:\temp\debDev.htm" GPATH="c:\temp" (URL=NONE) ;
PROC GPLOT DATA=work.debDev ;
  PLOT age * sex / HTML=bulle ;
RUN ; QUIT ;
ODS HTML CLOSE ;
Ici je ne me suis pas cassé pour trouver des ex-aequos, j'ai utilisé des variables quali. Mais si tu veux uniquement les points qui ont coordonnées exactement identiques, ça marche tout pareil. Sinon, il faut prévoir des variables arrondies au préalable.
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2011, 10h23   #9
Membre habitué
 
Inscription : janvier 2005
Messages : 527
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 527
Points : 134
Points : 134
bon, et bien, j'avance pas vite ...
je suis partie sur mon idée de coller bout à bout le texte des bulles de memes coordonnées. et pour garder le texte de la bulle précédente dans mon dataset, je voulais utiliser retain. Mais j'ai du mal à comprendre cette fonction.

Je créé une variable tooltip qui correspond à la bulle de la premiere observation de chaque groupe.
Je fais un retain de ce tooltip.
A l'itération suivante du data step, je dis (enfin je crois que je dis ça) que tooltip vaut le tooltip précédent concaténé avec la bulle courante.

Mon code:
Code :
1
2
3
4
5
6
7
8
9
 
DATA test3;
	SET test3;
	BY RRD1 RDD1; /* RDD1=x RRD1=y */
	retain tooltip;
	format tooltipb $1000.;
	IF first.RRD1 AND first.RDD1 then tooltip=bulle;
	tooltip=tooltip||bulle;
run;
Résultat:
tooltip vaut toujours la meme chose à chaque groupe de meme coordonnées, à savoir la valeur de bulle à la première observation de chaque groupe.

Pourriez vous m'aider sur le retain ?
Merci




Salut Olivier,
Je viens de voir ton message à l'instant. Je pars en réunion et je revois ça juste après. J'ai vu que tu me parles de sauts de lignes sous IE qui ne fonctionnent pas sous firefox mais pas de firefox où je suis donc pas de pb à ce niveau là. J'essaierai ton code sans le retain mais si tu peux me débugger sur le message que je viens d'écrire, je serais ravie .
debdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2011, 10h48   #10
Expert Confirmé
 
Avatar de olivier.decourt
 
Homme Olivier Decourt
Formateur en informatique
Inscription : avril 2008
Messages : 1 467
Détails du profil
Informations personnelles :
Nom : Homme Olivier Decourt
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Formateur en informatique
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 1 467
Points : 2 823
Points : 2 823
Citation:
si tu peux me débugger sur le message que je viens d'écrire, je serais ravie .
Il n'y a qu'à demander !
En fait le RETAIN fait bien ce que tu demandes. Le souci se trouve ailleurs, dans
Code :
format tooltipb $1000.;
qui ne sert pas à grand chose dans ce contexte. En effet, un format ne concerne que l'affichage. Tu as tout à fait le droit d'afficher un texte stocké sur 1 signe avec 2000 caractères si ça t'amuse : ça n'a aucune influence sur la place réservée par SAS pour stocker les valeurs.
Alors quand on ne lui précise rien, il déduit la longueur à prévoir en mémoire de la première valeur à stocker. C'est pour ça que quand tu ajoutes des choses à la fin, il n'a pas la place de les stocker et du coup, ça ne laisse pas de trace. Au lieu d'une instruction format, c'est un LENGTH qu'il te faut.
Code :
LENGTH tooltip $ 1000 ;
Je sépare exprès le $ du 1000, et j'ôte le point. On pourrait écrire aussi $1000 et $1000. et SAS comprendrait (en fait, je crois qu'il corrigerait en interne pour retrouver la syntaxe ci-dessus). L'intérêt de le présenter comme ça est d'éviter, justement, la confusion avec un format.
Autres petites choses : dans ton instruction format, il y a un B qui traîne à la fin du nom de ta variable. Sans doute une coquille.
Et pour concaténer la nouvelle bulle, n'oublie pas d'éliminer les blancs à droite dans la valeur existante :
Code :
tooltip=TRIM(tooltip)||bulle;
Dernière chose : je suppose que les valeurs de BULLE sont déjà calculées pour faire des bulles indépendantes. Donc elles commencent toutes par TITLE=. Je ne sais pas si ça peut fonctionner tel quel, parce que dans mon esprit il faudrait un seul TITLE= au début de toute l'infobulle. D'où mon code, qu'on peut transformer en étape DATA plus classique avec RETAIN.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
PROC SORT DATA=sashelp.class OUT=work.debDev ;
  BY age sex ;
RUN ;
DATA work.debDev ;
    SET work.debDev ;
    BY age sex ;
    LENGTH bulle $ 1000 ;
    RETAIN bulle ;
    IF FIRST.sex THEN bulle="TITLE='" ;
    bulle = CATT(bulle,name," poids=",weight,"&#13;") ;
    IF LAST.sex THEN DO ;
      bulle=CATT(bulle,"'") ; /* ferme les guillemets de l'infobulle */
      OUTPUT ; /* penser à ne garder qu'une obs par valeurs identiques */
    END ;
RUN ;
ODS HTML FILE="c:\temp\debDev.htm" GPATH="c:\temp" (URL=NONE) ;
PROC GPLOT DATA=work.debDev ;
  PLOT age * sex / HTML=bulle ;
RUN ; QUIT ;
ODS HTML CLOSE ;
Bonne réunion.
Olivier
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2011, 15h24   #11
Membre habitué
 
Inscription : janvier 2005
Messages : 527
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 527
Points : 134
Points : 134


Je ne sais plus quoi dire à part:

D'une part, merci d'avoir debuggé mon retain. Quand je mettais $1000, dans mon esprit, c'était bien pour spécifier la taille et je ne sais pas pourquoi j'ai mis format au lieu de length . Je devais pas être très réveillée en ce lund matin .
D'autre part, un grand merci pour le zoom: je n'aurai jamais pensé que ça puisse se faire, c'est trop la classe .

J'ai exactement ce que je voulais: mes infobulles apparaissent bien avec toutes les valeurs des points à l'intérieur meme pour ceux ayant les memes coordonnées. Le retour à la ligne entre 2 valeurs les rend beaucoup plus lisible (pour certains points, j'ai près de 40 valeurs !).

Encore mille mercis pour toute l'aide apportée.
debdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h10.


 
 
 
 
Partenaires

Hébergement Web