Mettre un nom de colonne sélectionné dans une formuleRe : Mettre un nom de colonne sélectionné dans une formuleSalut gzmorgan0 ,
c'est un excellent scénario. Comment le script doit-il être modifié afin d'ajouter d'autres boutons de formule, comme Col Mean ou Col Std Dev ?
Re : Mettre un nom de colonne sélectionné dans une formulegzmorgan,
Vous êtes un sorcier. J'ai essayé les deux méthodes que vous avez illustrées avec succès. Plus important encore, j'ai appris davantage de techniques de script. Merci beaucoup.Re : Mettre un nom de colonne sélectionné dans une formuleTout d'abord quelques remarques :
- oc est une référence de colonne dont la syntaxe oc( Connect Points(1) ) n'a pas pu être interprétée par JMP.
- Il semble que la syntaxe affichée dans l'index de script pour le tracé de superposition nécessite le nom de la colonne, voir l'exemple ci-dessous. Il acceptera également :Name("Volume"))(Connect Color (0) );
obj = Overlay Plot(
X( :Date ),
Y( :High, :Low, :Close, :Volume ),
Y Scale( Left, Left, Left, Right )
);
obj << Connect Points( 1 );
obj << :Volume( Connect Color( 0 ) );
obj << :Low( Connect Color( "Red" ) );
- Le tracé de superposition présente quelques fonctionnalités intéressantes, cependant, les développeurs JMP recommanderaient probablement d'utiliser Graph Builder. Pour la structure de votre table de données, Overlay pourrait être plus facile à utiliser, j'utiliserai donc Overlay.
- Le script ci-dessous a commencé avec un sous-ensemble du tableau de données Football, sans aucune des colonnes que vous avez ajoutées. Calcule ensuite la moyenne mobile. Le script crée un tracé de superposition et utilise Eval(Parse(EvalInsert())) pour construire la syntaxe affichée dans l'index de script avec le nom cité et l'option pour désactiver les points.
- La deuxième partie du script présente une méthode alternative. Activez les lignes et les points pour toutes les colonnes de superposition.Utilisez ensuite Xpath() pour créer une liste de références aux segments de ligne et aux segments marqueurs.Pour désactiver une ligne, définissez la largeur de la ligne sur 0. Pour désactiver les points, définissez la transparence sur 0.Je trouve que travailler avec les segments utilise une syntaxe plus simple.Cependant, Xpath(), bien qu'extrêmement utile, est probablement considéré comme plus avancé.J'espère que cela pourra aider.
Names default to here(1);
dt = current data table();
colnme = "Speed";
oc = Column(dt, colnme);
nc = dt << New Column( colnme || " Moving Average",
Numeric,
Formula(Col Moving Average(oc[],1,4,16) )
);
ovp = Overlay Plot( Y(oc, nc));
ovp << Connect Thru Missing(1);
ncnme = nc << get name;
//The syntax is ovp << :col( opt1);
Eval( Parse(EvalInsert("ovp << :name(\!"^ncnme^\!")(Show Points(0))" ) ) ) ;
//alternate method
ovl = Overlay Plot( Y(oc, nc));
ovl << Connect Thru Missing(1);
lines = ovl << Xpath("//LineSeg");
points = ovl << Xpath("//MarkerSeg");
wait(2);
lines[1] << Line width(0); //turn off line 1
wait(2);
lines[1] << Line width(2); //turn on line 1
wait(2);
lines[1] << Line width(0); //turn off line 1
wait(2);
points[2] << Transparency(0); //turn off points 2
Re : Mettre un nom de colonne sélectionné dans une formulePoursuivre mes efforts. J'ai fait beaucoup de progrès.J'ai mis un nom de colonne sélectionné dans ma formule et je peux maintenant créer un graphique de superposition de la colonne sélectionnée avec sa moyenne mobile à l'aide des paramètres MA d'une boîte de dialogue. Bon. Très agréable. J'utilise la fonction "Overlay Plot". Je peux modifier tous les points des deux graphiques, mais je n'arrive pas à comprendre comment modifier un seul des attributs du tracé.
Voici un extrait de code pour illustrer. Cela marche:
cn1 = colName || "";
cn2 = colName || " Moving Average";
dt << New Column( colName || " Moving Average",
Numeric,
Formula( Eval( Parse( formulaString ) ) )
);
oc = Column( cn1 );
nc = Column( cn2 );
nw2 << Close Window;
funny = Overlay Plot( Y( oc, nc ), );
funny << (Connect Points( 1 ));
Le tracé résultant a à la fois les points MA et d'origine connectés.
Cependant, si je change la dernière ligne pour modifier un seul des tracés, disons ceci, cela ne fonctionne pas :
funny << oc( Connect Points( 1 ) );
Aucun point n'est connecté.
Ainsi, "oc" est reconnu dans la fonction "Overlay Plot" comme étant l'une des colonnes Y, mais n'est pas reconnu dans l'instruction ci-dessus.
Quelqu'un peut-il m'aider s'il vous plaît ? Ma santé mentale est en jeu.
J'ai joint un tableau de données avec l'intégralité de mon script intégré.Il existe un petit script supplémentaire généré automatiquement pour créer l'intrigue comme je souhaite que le script entier le fasse ; Je n'ai pu réaliser ce tracé qu'en modifiant manuellement la légende.
Kévin
Re : Mettre un nom de colonne sélectionné dans une formuleD'ACCORD. Je le ferai donc.
Merci beaucoup,
Kévin
Re : Mettre un nom de colonne sélectionné dans une formuleAucun problème. Mais j'utiliserais la méthode de gz. Il est plus robuste dans la mesure où il gère les colonnes dont le nom contient des caractères spéciaux.
Re : Mettre un nom de colonne sélectionné dans une formuleMerci, GZ,
Oui, votre solution a fonctionné pour moi aussi. Le recouvrement si aucune colonne n'est sélectionnée est une bonne astuce. Je vais l'utiliser à l'avenir.
Re : Mettre un nom de colonne sélectionné dans une formuleMerci, Mike,
Oui, cela a effectivement fonctionné pour moi. Et j'ai appris quelques techniques de script supplémentaires.
Re : Mettre un nom de colonne sélectionné dans une formuleVotre script ne fonctionnera que s'il n'y a pas de symboles spéciaux dans les noms de vos colonnes. S'il y en a, la référence nommée doit être :Name("string"). De plus, une vérification indiquant qu'une colonne a été sélectionnée a été ajoutée au script.
Names Default to Here(1);
dt = Current Data Table();
colname = .;
New Window( "Select Column",
x = Col List Box(
Data Table( dt << get name ),
all, <<SET data="https://community.jmp.com/" type=""></SET>
Re : Mettre un nom de colonne sélectionné dans une formule
Essaye ça. Les deux dernières lignes de la partie col list box() semblaient être un script, ce qui signifie qu'elles auraient dû être séparées par le point-virgule (ou la colle).Le reste de ces lignes sont des arguments de la list box col, séparés par des virgules. La partie "colName = ... " de la zone de liste col est commentée ici car je ne pense pas qu'elle faisait grand-chose. Mieux vaut le saisir pendant la partie boîte à boutons du script. Vous pouvez rajouter la variable de table si vous le souhaitez.
Il serait préférable que la zone de liste charge uniquement des colonnes numériques. Je ne me souvenais pas comment faire cela correctement. Actuellement, tout est chargé dans la zone de liste. J'ai changé min/max col() en max sélectionné. C'est-à-dire pas plus de 1 à la fois.
En ce qui concerne la partie formule, il me faut généralement quelques essais et erreurs pour amener les chaînes là où je les veux. Cela semble fonctionner.
dt = Current Data Table();
colname = .;
New Window( "Select Column",
x = Col List Box(
Data Table( dt << get name ),
all,//numeric,
//min col( 1 ),
max selected( 1 )//,
//colname = Eval Expr (Expr(x << get selected)[1])//,
//dt << New Table Variable( "Selected Column", (x << get selected)[1] )
),
Button Box( "Moving Average",
colName = Char( (x << get selected)[1] );
//myCol = column(colName);
formulaString = "Col Moving Average( :"|| char(colName) ||", 0, 4, 0 )";
dt << New Column( colName || " Movin Average",
Numeric,
//Formula( Col Moving Average( Name Expr(colname), 0, 4, 0 ) )
Formula( eval(parse(formulaString)) )
)
)
);
Re : Mettre un nom de colonne sélectionné dans une formuleJ'essaie de comprendre comment convertir correctement ma sélection de colonnes à partir d'une boîte de dialogue dans une formule. J'ai regardé beaucoup de discussions et d'échantillons du livre de scripts, j'ai essayé pas mal de choses. Pas encore de dés. Comme vous pouvez le voir dans le script, je souhaite sélectionner une colonne et créer une nouvelle colonne basée sur la formule de moyenne mobile de la colonne. J'apprécierais de l'aide.
Voici mon dernier essai :
dt = Current Data Table();
colname = .;
New Window( "Select Column",
x = Col List Box(
Data Table( dt << get name ),
all,
min col( 1 ),
max col( 1 ),
colname = Eval Expr (Expr(x << get selected)[1]),
dt << New Table Variable( "Selected Column", (x << get selected)[1] )
),
Button Box( "Moving Average",
dt << New Column( Char( (x << get selected)[1] ) || " Movin Average",
Numeric,
Formula( Col Moving Average( Name Expr(colname), 0, 4, 0 ) )
)
)
);