Salut tout le monde,
J'essaie d'écrire du code JSL qui prend les données d'un tableau de données et les affiche graphiquement pour que l'utilisateur puisse le choisir pour une analyse plus approfondie. Ce que j'aimerais obtenir, c'est quelque chose comme un mélange entre le rapport Valeurs propres de la plate-forme PCA et le rapport Résumé des effets de la plate-forme Fit Model. J'aimerais que le visuel ressemble au rapport PCA, mais la fonctionnalité (c'est-à-dire la possibilité de sélectionner une ligne) du rapport Résumé des effets.
Rapport de valeur propre PCA (à quoi je veux qu'il ressemble) :

Rapport de synthèse de l'effet du modèle d'ajustement (la fonctionnalité que j'aimerais). Dans cette plate-forme, on peut sélectionner une ligne dans la List Box() et choisir de "supprimer" ou "ajouter". Je ne veux pas supprimer ou ajouter, mais je veux que l'utilisateur puisse sélectionner la ligne (à partir de la sortie ci-dessus):

J'ai joint la table de données avec laquelle je travaille, il s'agit de la "Table de données actuelle ()" dans le code JSL ci-dessous. Le code JSL ci-dessous peut me faire une partie du chemin, mais pas exactement ce que je veux.
Names Default To Here( 1 );
PC_dt = Current Data Table();
PC_n = {};
PC_eigv = {};
PC_per = {};
PC_cump = {};
For( i = 1, i <= N Rows( PC_dt ), i++,
Insert Into( PC_n, PC_dt:"Number"n[i] );
Insert Into( PC_eigv, Round( PC_dt:"Eigenvalue"n[i], 5 ) );
Insert Into( PC_per, Round( PC_dt:"Percent"n[i], 5 ) );
Insert Into( PC_cump, Round( PC_dt:"cumulative Percent"n[i], 5 ) );
);
PC_Rpt_win = New Window( "PC Results",
Outline Box( "Eigenvalues & cumulative Percent",
//List Box(
//List Box(
Table Box(
Number Col Box( "Number", Eval List( PC_n ) ),
Number Col Box( "Eigenvalue", Eval List( PC_eigv ), <<SET format=""></SET>
Avec les sections commentées, j'obtiens la sortie suivante du code (aucune ligne n'est sélectionnable, cependant):

Je ne sais vraiment pas si j'ai besoin de toute la partie pré-cadre du code où je génère des listes pour les PC et les valeurs propres, etc. Mais, cela semblait être la manière logique de le faire puisque je traite des colonnes dans une table de données et les fonctions nécessitent des listes. Cela fonctionne, même si ce n'est pas nécessaire.
</CODE></P><P> </P><P>Si j'inclus l'un ou les deux appels List Box() commentés autour de la Table Box(), j'obtiens ce qui suit. Les lignes sont sélectionnables, mais rien ne s'affiche :</P><P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="DiedrichSchmidt_3-1635336043749.png" style="width: 400px;"><IMG src="https://us.v-cdn.net/6038925/uploads/images/37045iA319787974999980/DiedrichSchmidt_3-1635336043749.png" role="button" title="DiedrichSchmidt_3-1635336043749.png" alt="DiedrichSchmidt_3-1635336043749.png" /></SPAN></P><P>Je ne suis pas sûr de ce que je fais mal, et l'index de script a des exemples limités sur la façon d'utiliser correctement l'appel List Box() avec une Table Box(). J'ai essayé de suivre l'arborescence de la fenêtre de rapport de la plate-forme Fit Model, mais cela ne fonctionne pas.</P><P> </P><P>En résumé, je voudrais corriger ce qui suit dans mon script :</P><OL><LI>Corrigez la Plot Col Box afin qu'elle ait la courbe de pourcentage cumulée comme le montre le rapport PC (première image ci-dessus). Ce n'est pas aussi critique que le point 2.</LI><LI>Corrigez l'appel de la zone de liste() autour de la zone de table() afin que l'utilisateur puisse sélectionner une ligne dans la zone de liste qui sera ensuite envoyée à une autre fonction pour une analyse plus approfondie.</LI></OL><P>Merci pour vos suggestions et votre aide !,</P><P>DS</P></LINGO-BODY><LINGO-LABS id="lingo-labs-430708" slang="en-US"><LINGO-LABEL>Script</LINGO-LABEL></LINGO-LABS><LINGO-SUB id="lingo-sub-430729" slang="en-US">Re: Aide au script pour Table Box() dans une List Box()</LINGO-SUB><LINGO-BODY id="lingo-body-430729" slang="en-US"><P>Existe-t-il un besoin spécifique pour List Box() ? Vous pouvez utiliser<CODE class=""> << Définir les lignes sélectionnables (); pour rendre les lignes sélectionnables dans Table Box, puis utilisez << définir la fonction de changement de ligne (Function({this}, ); pour ajouter une fonction à la sélection.
Exemple de Scripting Index :
Names Default To Here(1);
New Window("Mountains",
tb = Table Box(
String Col Box("Mountain", {"K2", "Delphi", "Kilimanjaro", "Grand Teton"}),
Number Col Box("Elevation (meters)", {8611, 681, 5895, 4199}),
Plot Col Box("", {8611, 681, 5895, 4199})
)
);
tb << Set Selectable Rows();
tb << set row change function(Function({this}, Print(this << get selected rows)));
salut @jthi ,
Merci pour votre retour rapide. J'avais essayé cela plus tôt, mais rien ne s'était passé, alors je l'ai abandonné pour un autre itinéraire, mais il ne menait nulle part. J'y suis retourné et j'ai essayé, et ça marche, merci ! La fonctionnalité ajoutée est utile. Cela a définitivement résolu le point 2, qui était le plus important. S'il y a une idée de comment réparer l'élément 1, ce serait génial, mais pas essentiel.
C'est lié, mais peut-être un autre fil (faites-le moi savoir et je le republierai comme un autre fil).
Savez-vous utiliser JSL pour enregistrer les valeurs DModX et T² de la plateforme PCA dans la table de données ? Tout cela est d'essayer d'automatiser ce processus, ou au moins de prendre plusieurs des autres étapes et de simplement donner à l'utilisateur les bases pour décider du nombre de PC à utiliser ensuite pour enregistrer les formules DModX et T².
Merci!,
DS
salut @jthi ,
Eh bien, oubliez la partie sur DModX, le Scripting Index m'a montré comment faire cela et cela fonctionne comme prévu. Il a un exemple pour Save T Square, mais cela ne fonctionne pas. Je vais continuer. Je pense que je dois faire référence à la bonne boîte Outline.
Merci!,
DS
Pour l'article 1 :
Je suppose qu'il existe une autre / meilleure façon de procéder, mais j'ai trouvé les messages << Lower et << Upper (nécessite que Lower soit spécifié). Avec << Lower, vous pouvez obtenir les premières valeurs de la colonne cumulative, puis les définir sur Plot Col Box with Lower
pcb << Lower(ncb << get as matrix);

Avec votre code, cela ressemblerait à ceci (ajoutez des références et utilisez-les):
Voir plus...Names Default To Here( 1 );
PC_dt = Current Data Table();
PC_n = {};
PC_eigv = {};
PC_per = {};
PC_cump = {};
For( i = 1, i <= N Rows( PC_dt ), i++,
Insert Into( PC_n, PC_dt:"Number"n[i] );
Insert Into( PC_eigv, Round( PC_dt:"Eigenvalue"n[i], 5 ) );
Insert Into( PC_per, Round( PC_dt:"Percent"n[i], 5 ) );
Insert Into( PC_cump, Round( PC_dt:"cumulative Percent"n[i], 5 ) );
);
PC_Rpt_win = New Window( "PC Results",
Outline Box( "Eigenvalues & cumulative Percent",
//List Box(
//List Box(
Table Box(
Number Col Box( "Number", Eval List( PC_n ) ),
Number Col Box( "Eigenvalue", Eval List( PC_eigv ), <<SET format=""></SET>Pour obtenir des valeurs :
Parfois, il peut suffire d'utiliser Make into data table (selon la plate-forme et si vous utilisez By variable):

puis en vérifiant à partir de la table résultante le script de table :


Parfois, cela donne un moyen assez rapide d'obtenir des références pour corriger les boîtes d'affichage.
salut @jthi ,
Merci encore pour vos retours rapides et votre aide. Oui, le <
Maintenant, mon seul problème est de savoir comment économiser T². Chaque fois que j'essaie d'adresser la boîte de contour en question à partir de la plate-forme PCA, j'obtiens une erreur de journal indiquant que la boîte d'affichage ne reconnaît pas <
Merci!,
DS