JSL : comment parcourir les colonnes, générer un rapport Graph Builder et enregistrer chacune d'elles sous forme de fichier JPGBonjour,
J'ai un ensemble de données contenant 41 variables. Je dois tracer chacun des 40 premiers par rapport au dernier, par exemple, pour créer 40 box plots ou jitter plots.
Créer un joli tracé complet via le menu Créer un graphique est simple et même amusant. Je sais comment sauvegarder le script de ce que j'ai fait, mais ce que je ne sais pas, c'est comment écrire une boucle qui prendra à chaque itération une autre variable et la remplacera dans mon code graphique d'origine. En d’autres termes, si j’ai 20 lignes de code, je veux une boucle qui exécutera le même code encore et encore et ne changera que l’endroit où je définis la variable dépendante. De plus, j'ai besoin d'un bon moyen d'afficher les résultats (40 fenêtres ne sont pas pratiques), alors j'ai pensé peut-être à enregistrer chacune d'entre elles au format JPG avant de passer à l'itération suivante. Est-ce possible avec JMP ?
Merci !
Re: Boucle JSLL'exemple suivant montre comment obtenir une liste de noms de colonnes sous forme de chaînes de caractères.La boucle For génère un générateur de graphiques invisible en commençant par la deuxième colonne de la liste car la première est utilisée comme X.(La publication d'origine devrait les ajuster pour commencer par la première colonne de la liste et s'arrêter avant la dernière colonne de la liste.) Chaque rapport Graph Builder est enregistré sous forme de fichier JPG dans lequel le nom de la colonne est inclus dans le nom du fichier.Enfin, le tableau de données et les rapports invisibles sont fermés.
/* Open a sample data table */
dt = Open( "$SAMPLE_DATA\Fitness.jmp" );
/* Obtain a list of numeric/continuous column names as strings */
colList = dt << Get Column Names( Continuous, String );
/* Loop through the list to generate the desired Graph Builder
and save the report as a JPEG file */
For( i = 2, i <= Nitems( colList ), i++,
gb = dt << Graph Builder(
Size( 534, 454 ),
Show Control Panel( 0 ),
Variables(
X( :Age ),
Y( Column( dt, colList[i] ) ),
Color( :Age )
),
Elements(
Points(
X,
Y,
Legend( 3 ),
Summary Statistic( "Mean" ),
Error Bars( "Confidence Interval" )
)
),
SendToReport(
Dispatch(
{},
"Graph Builder",
FrameBox,
{Marker Size( 5 )}
)
),
Invisible
);
gb << Save Picture( "E:\Trash\Graph Builder_" || colList[i] ||".jpg", JPEG );
);
/* Close table and all invisible reports */
Close( dt, No Save );
J'espère que cela pourra aider!
Boucle JSLSalut,
merci pour votre tentative d'aider. Malheureusement, je ne suis toujours pas assez familier avec JSL (quand j'aurai une pause du travail, je m'y plongerai en profondeur), et j'ai eu des problèmes avec les crochets et tout ça, donc votre suggestion n'a pas fonctionné, j'ai probablement il y avait un panneau au mauvais endroit.
Mon code d'origine est :
Graph Builder(
Size( 880, 750 ),
Show Control Panel( 0 ),
Variables(
X( :Cutoff, Size( 0, 21 ) ),
Y( :S1, Size( 0, 22 ) ),
Color( :Cutoff )
),
Elements(
Points( X, Y, Color, Legend( 1 ), Jitter( 1 ) ),
Line(
X,
Y,
Color,
Legend( 2 ),
Row order( 0 ),
Error Bars( "Confidence Interval" ),
Summary Statistic( "Mean" )
)
),
SendToReport( Dispatch( {}, "Graph Builder", FrameBox, {Marker Size( 5 )} ) )
);
Pouvez-vous s'il vous plaît m'aider à l'envelopper avec la boucle ?
Acclamations!
Boucle JSLSalut!Ce que vous voulez faire est assez simple.
Tout d'abord, dans votre script, vous souhaiterez définir la table de données actuelle :
cd = Current Data Table();
Maintenant, récupérez la liste des noms de colonnes :
column_names = cd << Get Column Names;
Maintenant, il existe plusieurs façons de réaliser la partie suivante, mais je trouve que celle-ci est la plus simple.Vous souhaiterez démarrer une chaîne de texte que nous finirons par analyser et évaluer.La première partie consiste à créer une nouvelle fenêtre.
nw = "New Window(\"Graphs\",
randomname = V List Box(";
Nous pouvons maintenant écrire la boucle qui insérera votre code personnalisé avec une modification mineure.Je suppose que vous savez comment utiliser une boucle "for" JMP - je vais simplement parcourir toutes les colonnes du tableau, sauf la dernière.
for(i=1,i<=length(column_names)-1,i++,
nw = nw || "PUT YOUR CUSTOM CODE HERE*" || ",";
);
*Dans votre code personnalisé, où vous définissez la variable dépendante, supprimez-la et remplacez-la par
:Name(\"" || column_name || "\")
Cela permettra de coller le nom du texte de chaque variable dépendante que vous avez dans le script personnalisé que vous avez écrit.
Enfin, nous devons terminer la nouvelle fenêtre que nous avons commencée plus tôt : la première ligne termine l'écriture du code pour créer la nouvelle fenêtre, la deuxième ligne analyse d'abord le texte pour en faire du code, puis évalue le code contenu dans nw.
nw = nw || "));";
eval(parse(nw));
Cela devrait suffire - faites-moi savoir si vous avez des questions ou si vous avez besoin d'une aide spécifique !