JSL peut-il être utilisé pour automatiser le traçage de graphiques et l'ajout de lignes de référence, entre autresSalut,
Je trace régulièrement des graphiques de distribution.Certains jours, je ne reçois que quelques colonnes de données, d’autres un peu plus.
Une fois les graphiques individuels générés, je devrai ajuster leur axe Y min/max respectif pour plus de lisibilité, puis ajouter quelques lignes de référence (essentiellement des lignes USL et LSL).Au bout d'un moment, cela devient fastidieux, surtout qu'il y a beaucoup de colonnes de données.
J'aimerais voir s'il existe un moyen d'automatiser ce processus puisque le processus lui-même est relativement simple et répétitif. Je pense que les scripts JSL peuvent être la solution ici (je suis très nouveau dans les scripts).
Voici ce que j'aimerais que le script fasse :
1. Chaque colonne de données se compose de 5 points de données, la 1ère et la 2ème ligne contenant respectivement l'USL et le LSL.
2. Le script doit lire toutes les colonnes de données
3. Tracez des graphiques de distribution individuels pour toutes les données
4. Ajoutez des lignes de référence USL et LSL (pouvons-nous définir l'épaisseur et la couleur des lignes ici ?)
5. Modifiez ensuite le Min de l'axe Y en LSL-0,003 et le Max de l'axe Y en USL en USL+0,003.
JSL peut-il faire ce qui précède ?
Merci!
Automatisation et scriptsRe : JSL peut-il être utilisé pour automatiser le traçage de graphiques et l'ajout de lignes de référence, entre autresRéponse courte : JSL peut le faire.
Re : JSL peut-il être utilisé pour automatiser le traçage de graphiques et l'ajout de lignes de référence, entre autres- Bienvenue dans la Communauté
- Oui, un script JMP peut facilement effectuer les tâches que vous avez décrites.
- JMP affichera automatiquement vos valeurs USL et LSL sur chacun des graphiques.Cependant, la structure de données que vous avez décrite n'est pas une structure normale pour JMP.C'est une question assez simple d'ajouter à un script le JSL pour prendre les données USL et LSL et les déplacer dans la propriété de colonne Spec Limits pour chaque colonne, puis supprimer les 2 premières lignes de vos données.
- La description de vos données semble indiquer que vous ne disposez que de 3 points de données pour chaque colonne de données.(5 points de données moins les lignes LSL et USL) et à partir de là, vous tracez des graphiques de distribution.Selon la terminologie JMP, un graphique de distribution est un affichage d'histogramme.Est-ce ce que vous spécifiez comme graphique dont vous avez besoin ?Si oui, comment créer ce graphique à partir de 3 points de données.
- Changer les valeurs min et max de l'axe est très simple et peut être ajouté à votre script.
- Mon interprétation de ce que vous avez décrit dans votre entrée initiale est peut-être totalement fausse.Ce serait bien si vous pouviez fournir un échantillon des données que vous utilisez et une illustration du graphique que vous devez afficher.
- Je vous suggère de prendre le temps de parcourir le document Découverte de JMP disponible dans le menu déroulant Aide de JMP.
Re : JSL peut-il être utilisé pour automatiser le traçage de graphiques et l'ajout de lignes de référence, entre autresMerci pour votre réponse.
Pour le point 4, je suis désolé de ne pas bien m'expliquer. Pour être clair, il y aura 7 lignes de données dans chaque colonne. La 1ère ligne est le LSL et la 2ème ligne est l'USL. Les lignes 3 à 7 correspondent aux données réelles.
Pour le point 6, voici mes exemples de données et les graphiques résultants :


Pour le graphique de cet exemple, les première et deuxième lignes de données sont également tracées, ce que je ne souhaite pas. Il s'agit respectivement de la LSL et de l'USL. Ce que je fais normalement, c'est que je n'inclue pas le LSL et l'USL dans les données.
Re : JSL peut-il être utilisé pour automatiser le traçage de graphiques et l'ajout de lignes de référence, entre autresVoici un exemple de script qui produit ce que vous voulez

Names Default To Here( 1 );
// Create the data table
// dt = open( "<PATH to="" the="" file="" that="" has="" the="" data="https://community.jmp.com/">" );
// Here is the sample data table you provided
dt = New Table( "Example",
Add Rows( 7 ),
New Column( "Data1",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [9.5, 10.5, 10, 10.2, 9.7, 9.6, 10.4] )
),
New Column( "Data2",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [4.5, 5.5, 5, 5.1, 5.2, 4.9, 4.7] )
)
);
// Ge all of the numeric column's names
colNameList = dt << get column names( string, continuous );
//Take the data from rows 1 & 2 and create the Spec Limints column property
For Each( {col}, colNameList,
Eval(
Substitute(
Expr(
Column( dt, col ) << set property(
"Spec Limits",
{LSL( _LSL_ ), USL( _USL_ ), Show Limits( 1 )}
)
),
Expr( _LSL_ ), As Column( dt, col )[1],
Expr( _USL_ ), As Column( dt, col )[2]
)
)
);
// Exclude and Hide row 1 & 2 to eliminate them from Distributions
dt << Select rows( {1,2} );
dt << hide and exclude;
// Run the Distribution Platform, having the Spec Limits as
// Column Properties, will insure the proper Min and Max for
// the Y axis
dt << Distribution( column( eval(colNameList) ));</PATH>Re : JSL peut-il être utilisé pour automatiser le traçage de graphiques et l'ajout de lignes de référence, entre autresOh wow.. Je ne m'attendais certainement pas à ce que vous écriviez le scénario. Merci !
J'ai vu que la partie avant du script concerne la création de l'exemple de tableau de données que j'ai fourni plus tôt. Comment puis-je le modifier pour pouvoir demander au script de pointer vers une table de données existante de mon choix (je suppose qu'il s'agit du fichier .jmp), puis de l'exécuter ?
Re : JSL peut-il être utilisé pour automatiser le traçage de graphiques et l'ajout de lignes de référence, entre autresOuverture du tableau : Guide de script > Tables de données > Premiers pas avec les tables de données (utiliser Ouvrir() )
Obtenir le chemin de la sélection de l'utilisateur Choisir un fichier()
Re : JSL peut-il être utilisé pour automatiser le traçage de graphiques et l'ajout de lignes de référence, entre autresJe pense que je dois incorporer un autre ensemble de codes auquel vous avez aidé à répondre dans mon autre fil :
If( Is Missing( fn ),
throw(),
// Else Open the selected file
Open( fn )
);
Je suppose qu'après avoir ouvert le fichier, je dois le charger en tant que table de données ? Qu’est-ce qui signifie utiliser la syntaxe dt ?
Re : JSL peut-il être utilisé pour automatiser le traçage de graphiques et l'ajout de lignes de référence, entre autresVous utilisez Open() pour ouvrir le datatable, open renvoie ensuite une référence au datatable (s'il réussit à ouvrir le fichier) qui a été ouvert et qui est ensuite stocké dans la variable dt
dt = Open("myfile.jmp");Re : JSL peut-il être utilisé pour automatiser le traçage de graphiques et l'ajout de lignes de référence, entre autresJ'ai modifié le script partagé précédemment par l'un des contributeurs (merci) afin que l'utilisateur puisse choisir quel fichier de données (.jmp) ouvrir :
Names Default To Here( 1 );
// Open a dialog to choose a .jmp file to open
// Get the filename of the .jmp file to open
dt = Pick File("Select a .jmp file to open", "", {"JMP Files|jmp;jsl;jrn", "All Files|*"}, 1, 0, "");
// If the user did not select a file, exit the script
If( Is Missing( dt ),
Throw(),
// Else Open the selected file
Open( dt )
);
// Get all of the numeric column's names
colNameList = dt << get column names( string, continuous );
// Take the data from rows 1 & 2 and create the Spec Limits column property
For Each( {col}, colNameList,
Eval(
Substitute(
Expr(
Column( dt, col ) << set property(
"Spec Limits",
{LSL( _LSL_ ), USL( _USL_ ), Show Limits( 1 )}
)
),
Expr( _LSL_ ), As Column( dt, col )[1],
Expr( _USL_ ), As Column( dt, col )[2]
)
)
);
// Exclude and Hide row 1 & 2 to eliminate them from Distributions
dt << Select rows( {1,2} );
dt << hide and exclude;
// Run the Distribution Platform
dt << Distribution( column( eval(colNameList) ));Lors de l'exécution du script, j'ai rencontré l'erreur suivante :
Send attend un objet scriptable lors de l'accès ou de l'évaluation de 'Send', dt << /*###*/obtenir les noms de colonnes (chaîne, continue) /*###*/
Il semble qu'il y ait un problème avec le dt << obtenir les noms des colonnes ?
Re : JSL peut-il être utilisé pour automatiser le traçage de graphiques et l'ajout de lignes de référence, entre autresVous avez dt comme chemin de fichier, c'est donc une chaîne. Vous devez faire référence au fichier nouvellement ouvert, comme ci-dessous. Notez l'instruction Open()
Names Default To Here( 1 );
// Open a dialog to choose a .jmp file to open
// Get the filename of the .jmp file to open
dt = Pick File("Select a .jmp file to open", "", {"JMP Files|jmp;jsl;jrn", "All Files|*"}, 1, 0, "");
// If the user did not select a file, exit the script
If( Is Missing( dt ),
Throw(),
// Else Open the selected file
dt = Open( dt )
);
// Get all of the numeric column's names
colNameList = dt << get column names( string, continuous );
// Take the data from rows 1 & 2 and create the Spec Limits column property
For Each( {col}, colNameList,
Eval(
Substitute(
Expr(
Column( dt, col ) << set property(
"Spec Limits",
{LSL( _LSL_ ), USL( _USL_ ), Show Limits( 1 )}
)
),
Expr( _LSL_ ), As Column( dt, col )[1],
Expr( _USL_ ), As Column( dt, col )[2]
)
)
);
// Exclude and Hide row 1 & 2 to eliminate them from Distributions
dt << Select rows( {1,2} );
dt << hide and exclude;
// Run the Distribution Platform
dt << Distribution( column( eval(colNameList) ));Re : JSL peut-il être utilisé pour automatiser le traçage de graphiques et l'ajout de lignes de référence, entre autresDéplacé vers un nouveau fil avec un titre plus pertinent.
Re : JSL peut-il être utilisé pour automatiser le traçage de graphiques et l'ajout de lignes de référence, entre autresCe code est un peu plus propre :
// Get the filename of the .jmp file to open
filename = Pick File("Select a .jmp file to open", "", {"JMP Files|jmp;jsl;jrn", "All Files|*"}, 1, 0, "");
// If the user did not select a file, exit the script
If( Is Missing( filename ),
Throw(),
// Else Open the selected file
dt = Open( filename )
);