Ajouter une variable dans le générateur de graphiquesJ'ai un tableau de données avec plusieurs colonnes et lignes.
Je souhaite parcourir chaque colonne et l'ajouter à l'outil de création de graphiques sur l'axe des abscisses.
Voici mon script simple
dt = Open( filepath );
all_cols = dt << Get Column Names( "String" );
cols_to_plot={};
For Each ({col}, all_cols,
If(col == "A" || col == "B",,
Insert into (cols_to_plot, col);
)
);
graph = dt << Graph Builder();
For Each ({col},cols_to_plot,
graph << Add Variable ("X", Column(dt, col)); // Also tried graph << Add Variable (X, Column(dt, col));
);
Ce script me renvoie systématiquement l'erreur suivante :
La valeur de l'argument est invalide lors de l'accès ou de l'évaluation de 'Add Variable', Argument incorrect( "X " ), Add Variable( "X", Column( dt, col ) ) /*###*/ à la ligne 600
Pour vérifier, j'exécute le script ci-dessous et il fonctionne correctement, mais je souhaite le représenter graphiquement pour environ 1000 colonnes.
graph = dt << Graph Builder(
Variables(X(cols_to_plot[1]),X(cols_to_plot[2]),X(cols_to_plot[3]));
);
Qu'est-ce qui m'échappe ? Merci de votre aide.
Modification (jthi) : ajout de la mise en forme JSL
Automatisation et scriptageRe: Ajouter une variable dans le générateur de graphiquesJe ne suis pas certain du type d'intrigue que vous envisagez, mais voici un exemple :
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
cols_to_plot = {"age", "sex"};
graph = dt << Graph Builder();
For Each ({col},cols_to_plot,
Eval(EvalExpr(
graph << Add Variable({Expr(NameExpr(AsColumn(dt, col))), Role("X")});
));
);
Vérifiez la syntaxe correcte dans l'index de script pour << Ajouter une variable et utilisez l'évaluation d'expression pour obtenir la référence de colonne au format correct

(Selon le graphique final que vous souhaitez obtenir, vous pourriez opter pour une autre solution consistant à construire l'expression complète du générateur de graphes.)
Re: Ajouter une variable dans le générateur de graphiquesJ'ai essayé cette méthode et j'ai aussi essayé
For Each ({col}, cols_to_plot,
col_ref = Column(dt, col);
graph << Add variable (col_ref, Role("X"));
);
Dans les deux cas, mon script JSL se bloque. Ma table de données ne contient que 1000 colonnes et 500 lignes.
Est-ce la méthode la plus efficace, ou existe-t-il un moyen plus rapide de tracer toutes les colonnes du tableau sur l'axe X simultanément ? Si j'effectue la même opération via une interface graphique, c'est beaucoup plus rapide.
Re: Ajouter une variable dans le générateur de graphiquesQuel type d'intrigue essayez-vous de créer ?
Re: Ajouter une variable dans le générateur de graphiquesJ'essaie de créer un nuage de points simple, avec toutes les colonnes sur l'axe des abscisses en série.
Quelque chose comme ci-dessous

Re: Ajouter une variable dans le générateur de graphiquesÉtant donné le nombre important de colonnes, je vous recommande de créer une expression Graph Builder plutôt que d'ajouter les colonnes une par une. Créez le graphique manuellement, copiez le script pour comprendre sa construction, puis reproduisez-le en JSL. Voici un exemple.
Script créé par JMP
Graph Builder(
Size(528, 458),
Show Control Panel(0),
Variables(
X(:"0.642539"n, Combine("Parallel Merged")),
X(:"0.645736349"n, Position(1), Combine("Parallel Merged")),
X(:"0.648933698"n, Position(1), Combine("Parallel Merged")),
X(:"0.652131047"n, Position(1), Combine("Parallel Merged")),
X(:"0.655328396"n, Position(1), Combine("Parallel Merged")),
X(:"0.658525745"n, Position(1), Combine("Parallel Merged")),
X(:"0.661723094"n, Position(1), Combine("Parallel Merged")),
X(:"0.664920443"n, Position(1), Combine("Parallel Merged")),
X(:"0.668117792"n, Position(1), Combine("Parallel Merged")),
X(:"0.671315141"n, Position(1), Combine("Parallel Merged")),
X(:"0.67451249"n, Position(1), Combine("Parallel Merged")),
X(:"0.677709839"n, Position(1), Combine("Parallel Merged")),
X(:"0.680907188"n, Position(1), Combine("Parallel Merged")),
X(:"0.684104537"n, Position(1), Combine("Parallel Merged")),
X(:"0.687301886"n, Position(1), Combine("Parallel Merged")),
X(:"0.690499235"n, Position(1), Combine("Parallel Merged"))
),
Elements(Points(X(1), X(2), X(3), X(4), X(5), X(6), X(7), X(8), X(9), X(10), X(11), X(12), X(13), X(14), X(15), X(16), Legend(4)))
);
Pour créer cela avec JSL, vous pourriez faire quelque chose comme ceci :
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Functional Data/NMR DoE.jmp");
nrmcols = dt << get column group("NMR Spectra");
colnames = Transform Each({col}, nrmcols,
AsColumn(dt, col) << get name;
);
colnames = colnames[1::20];
var_expr = Expr(Variables());
points_expr = Expr(Points());
For Each({colname, idx}, colnames,
x_expr = EvalExpr(X(Expr(NameExpr(AsColumn(dt, colname))), Position(1), Combine("Parallel Merged")));
point_expr = EvalExpr(X(Expr(idx)));
Insert Into(var_expr, Name Expr(x_expr));
Insert Into(points_expr, Name Expr(point_expr));
);
gb = Eval(Substitute(
Expr(dt << Graph Builder(
Size(528, 458),
Show Control Panel(0),
_var_,
Elements(_points_)
)),
Expr(_var_), Name Expr(var_expr),
Expr(_points_), Name Expr(points_expr)
));
Write();
Re: Ajouter une variable dans le générateur de graphiquesCela fonctionne parfaitement, merci pour votre aide.
Re: Ajouter une variable dans le générateur de graphiquesBonjour,
J'ai un problème avec les graphiques que j'ai créés : je n'arrive pas à les enregistrer dans les formats que j'ai essayés (.jmpreport, .jrp, etc.). Je ne souhaite pas enregistrer des graphiques statiques aux formats PNG ou JPG, mais des graphiques interactifs avec des données intégrées.
nw = New Window("printing window",
gb = Eval(Substitute(
Expr(dt << Graph Builder(
Show Window(1),
Size(528, 458),
Show Control Panel(0),
_var_,
Elements(_points_)
)),
Expr(_var_), Name Expr(var_expr),
Expr(_points_), Name Expr(points_expr)
));
); <BR /><BR />reportpath = ::my_dir_path||"/metadata/"||metaTestfile;
newWindow<< Save(reportpath); Also tried
gb = Eval(Substitute(
Expr(dt << Graph Builder(
Show Window(1),
Size(528, 458),
Show Control Panel(0),
_var_,
Elements(_points_)
)),
Expr(_var_), Name Expr(var_expr),
Expr(_points_), Name Expr(points_expr)
));
gb << Show Window;
newWindow = Window (gb);
reportpath = ::my_dir_path||"/metadata/"||metaTestfile;
newWindow<< Save(reportpath );
The script doesn't throw any error in any case but also not saving the graph
Re: Ajouter une variable dans le générateur de graphiquesL'index des scripts contient généralement les réponses aux questions sur les scripts (<< Rapport de la fenêtre d'enregistrement)
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Functional Data/NMR DoE.jmp");
nrmcols = dt << get column group("NMR Spectra");
colnames = Transform Each({col}, nrmcols,
AsColumn(dt, col) << get name;
);
colnames = colnames[1::20];
var_expr = Expr(Variables());
points_expr = Expr(Points());
For Each({colname, idx}, colnames,
x_expr = EvalExpr(X(Expr(NameExpr(AsColumn(dt, colname))), Position(1), Combine("Parallel Merged")));
point_expr = EvalExpr(X(Expr(idx)));
Insert Into(var_expr, Name Expr(x_expr));
Insert Into(points_expr, Name Expr(point_expr));
);
gb = Eval(Substitute(
Expr(dt << Graph Builder(
Size(528, 458),
Show Control Panel(0),
_var_,
Elements(_points_)
)),
Expr(_var_), Name Expr(var_expr),
Expr(_points_), Name Expr(points_expr)
));
gb << Save Window Report("$DOWNLOADS/test.jrp", embed data(1));
// demo purposes
Close(dt, no save);
wait(1);
Open("$DOWNLOADS/test.jrp");
Write();