Comment figer l'affichage de la carte de contrôle lorsque les données sont mises à jourSalut,
J'ai un script qui lit un fichier csv et fait une carte de contrôle. J'aime automatiser ce processus afin que les nouvelles données soient mises à jour, la carte de contrôle ne génère pas de nouvelles cartes. J'aime ne voir que sur le graphique avec des données mises à jour.
Voici le script que j'ai utilisé. J'apprécie ton aide. Merci
------------------
Noms par défaut ici ( 1 );
dt = Ouvrir (
"/Users/adatorab/Documents/JMP/PASS.csv" ,invisible);
obj = dt <<
Générateur de cartes de contrôle (
Variables( Y( :A ) ),
Graphique (
Position( 1 ),
Points(
Statistique(
"Individuel"
)
),
Limites(
Sigma(
« Portée mobile »
)
)
),
Graphique (
Position( 2 ),
Points(
Statistique(
« Portée mobile »
)
),
Limites(
Sigma(
« Portée mobile »
)
)
)
);
objet << Afficher la fenêtre ( 0 );
nw = Nouvelle fenetre ( "Carte de contrôle" );
nw << Ajouter (( H Zone de liste ( (objet << Rapport ) << Boîte de clonage )));
Re : Comment figer l'affichage de la carte de contrôle lorsque les données sont mises à jourMerci beaucoup pour votre aide.
Re : Comment figer l'affichage de la carte de contrôle lorsque les données sont mises à jourJ'ai copié le code de la carte de contrôle de Bryon dans le vôtre, ajouté un temps "min" aléatoire, et voici ce que je vois :
//Open a window to show a control chart and then update
//the chart every 15 seconds
//Includes a button to refresh early.
Names Default To Here( 1 );
//Define variables here that need to keep their values through subsequent function calls
//This includes the window and data table
//Open a window to hold the chart (note this only happens once)
nw = New Window( "Control Chart",
V List Box(
Button Box( "New Data", UpdateData() ),
holder = H List Box();
)
);
//Make a variable to hold a reference to the data table
dt = .;
//A function that will update the chart
UpdateData = Function( {},
//Close the table if it is already open
Try( dt << Close Window );
//Open data table
dt = Open( "$SAMPLE_DATA/Abrasion.jmp", Private );
//Make the control chart
obj = dt << Control Chart(
Group Size( 1 ),
KSigma( 3 ),
Chart Col( :Abrasion, Individual Measurement ),
SendToReport(
Dispatch(
{"Individual Measurement of Abrasion"},
"1",
ScaleBox,
{Min( nrows() - Floor( Random Uniform( 10, 25 ) ) ), Max( nrows() + 2 ), Inc( 5 ),
Minor Ticks( 1 )}
)
)
);
//Hide the temporary control chart window
obj << ShowWindow( 0 );
//Remove existing/old graph from the window (if there is one)
Try( (holder << Child) << Delete );
//Add the new graph
holder << Append( (H List Box( (obj << Report) << Clone Box )) );
//Close the temporary control chart
obj << Close Window;
);
//Script to update then chart and then call itself 15 seconds later
quickieScript = Expr(
//Load the chart in the window (run the script in the function)
UpdateData();
//Run this same script in 5 seconds
Schedule( 5, quickieScript );
);
//Start things off:
quickieScript;Re : Comment figer l'affichage de la carte de contrôle lorsque les données sont mises à jouril semble que vous ayez un rapport de générateur de carte de contrôle. Les cartes de contrôle classiques fonctionnent un peu différemment. (Plus facile)
Re : Comment figer l'affichage de la carte de contrôle lorsque les données sont mises à jourMerci. J'ai essayé ceci et je n'obtiens aucune erreur mais je ne vois pas l'axe x seulement vingt points.
Pouvez-vous aider davantage? Je l'apprécie beaucoup.
//Ouvrir une fenêtre pour afficher une carte de contrôle puis mettre à jour
//le graphique toutes les 15 secondes
// Inclut un bouton pour actualiser plus tôt.
Noms par défaut ici ( 1 );
// Définissez ici les variables qui doivent conserver leurs valeurs lors des appels de fonction ultérieurs
// Cela inclut la fenêtre et la table de données
// Ouvre une fenêtre pour contenir le graphique (notez que cela ne se produit qu'une seule fois)
nw = Nouvelle fenetre ( "Carte de contrôle" ,
Zone de liste V (
Boîte à boutons ( "Nouvelles données" , UpdateData() ),
titulaire = H Zone de liste ();
)
);
// Créer une variable pour contenir une référence à la table de données
dt = . ;
// Une fonction qui mettra à jour le graphique
Mettre à jour les données = Fonction ( {},
//Ferme la table si elle est déjà ouverte
Essayer ( dt << Fermer la fenêtre );
//Ouvrir la table de données
dt = Ouvrir ( "$SAMPLE_DATA/Abrasion.jmp" , Privé );
//Faire la carte de contrôle
obj = dt << Générateur de cartes de contrôle (
Afficher deux cartes Shewhart( 0 ),
Afficher le panneau de configuration( 0 ),
Afficher la capacité( 0 ),
Variables( Y( :Abrasion ) ),
Graphique (
Points( Statistique( "Individuel" ) ),
Limites (Sigma (gamme mobile)),
//Avertissements( Test 1( 1 ) )
EnvoyerVersRapport(
Expédition(
{ "Mesure individuelle de l'abrasion" },
"1" ,
ScaleBox,
{ Min ( nrows ()- 20 ), Max ( nrows ()+ 2 ), Inc( 5 ),
Tiques mineures ( 1 )}
)
)
)
);
//Masquer la fenêtre de la carte de contrôle temporaire
objet << Afficher la fenêtre ( 0 );
//Supprime le graphique existant/ancien de la fenêtre (s'il y en a un)
Essayer ( (titulaire << Enfant ) << Supprimer );
// Attendez un moment pour afficher la mise à jour du graphique
Attendez ( 0,2 );
//Ajouter le nouveau graphique
titulaire << Ajouter ( ( H Zone de liste ( (objet << Rapport ) << Boîte de clonage )) );
//Ferme la carte de contrôle temporaire
objet << Fermer la fenêtre ;
);
//Script pour mettre à jour puis tracer puis s'appeler 15 secondes plus tard
quickieScript = Expr (
//Charger le graphique dans la fenêtre (exécuter le script dans la fonction)
UpdateData();
//Exécute ce même script en 15 secondes
Calendrier ( 15 , quickieScript );
);
// Commencer les choses :
quickieScript ;
Re : Comment figer l'affichage de la carte de contrôle lorsque les données sont mises à jourCeci est un script de carte de contrôle à exécuter sur Abrasion.jmp
Control Chart(
Group Size( 1 ),
KSigma( 3 ),
Chart Col( :Abrasion, Individual Measurement ),
SendToReport(
Dispatch(
{"Individual Measurement of Abrasion"},
"1",
ScaleBox,
{Min( nrows()-25 ), Max( nrows()+2 ), Inc( 5 ),
Minor Ticks( 1 )}
)
)
);
Il utilise la plate-forme de carte de contrôle classique
Re : Comment figer l'affichage de la carte de contrôle lorsque les données sont mises à jourMerci pour vos suggestions. Je pense que c'était ma deuxième question. Où dois-je insérer votre script dans le script original (ci-dessus).
Re : Comment figer l'affichage de la carte de contrôle lorsque les données sont mises à jourMerci beaucoup. Cela a résolu mon problème.
Re : Comment figer l'affichage de la carte de contrôle lorsque les données sont mises à jourLe problème est-il que vous ne souhaitez voir que les données les plus récentes dans le tableau de contrôle ?
J'ai rencontré des scènes où les données sont mises à jour dans une table. Chaque fois que je récupère une copie du tableau, je ne veux voir que les 50 dernières lignes, quel que soit le nombre de lignes dans le tableau.
C'est assez facile à mettre en place. Créez simplement une carte de contrôle et ajustez l'axe des x. Ensuite, regardez le script de la carte de contrôle et trouvez la partie qui ressemble au script ci-dessous.
SendToReport(
Dispatch(
{"Individual Measurement of Metric 1"},
"1",
ScaleBox,
{Min( nrows()-50), Max( nrows()+2 ), Inc( 5 ),
Minor Ticks( 0 )}
),
Là où il est écrit Min( et Max(, modifiez les valeurs dans le script d'origine. Remplacez le nombre dans min() par nlignes()-50 et remplacez le nombre dans max() par nlignes()+2.
Maintenant, si vous faites toutes les choses fantaisistes, supprimez et ajoutez, vous obtiendrez une carte de contrôle avec les données les plus récentes.
Re : Comment figer l'affichage de la carte de contrôle lorsque les données sont mises à jourMaintenant, je pense que je comprends.Le problème est que vous ouvrez une nouvelle fenêtre à chaque fois que le script s'exécute.Au début de chaque mise à jour, vous souhaitez soit fermer la dernière fenêtre, soit actualiser la même fenêtre avec un nouveau graphique.Vous trouverez ci-dessous un exemple de ce dernier.
J'écris souvent du "pseudocode" dans les commentaires avant d'écrire du vrai code, je trouve que cela aide à s'assurer que le code fait réellement ce que j'attends de lui.Ensuite, une fois que tout le flux de travail a du sens, je remplis le code pour le faire réellement.
//Open a window
//Every 15 Seconds:
//Make a chart with the latest data
//Update the window with a new chart
//Open a window to show a control chart and then update
//the chart every 15 seconds
//Includes a button to refresh early.
Names Default To Here( 1 );
//Define variables here that need to keep their values through subsequent function calls
//This includes the window and data table
//Open a window to hold the chart (note this only happens once)
nw = New Window( "Control Chart",
V List Box(
Button Box( "New Data", UpdateData() ),
holder = H List Box();
)
);
//Make a variable to hold a reference to the data table
dt = .;
//A function that will update the chart
UpdateData = Function( {},
//Close the table if it is already open
Try( dt << Close Window );
//Open data table
dt = Open( "$SAMPLE_DATA/Abrasion.jmp", Private );
//Make the control chart
obj = dt << Control Chart Builder(
Variables( Y( :Abrasion ) ),
Chart(
Position( 1 ),
Points( Statistic( "Individual" ) ),
Limits( Sigma( "Moving Range" ) )
),
Chart(
Position( 2 ),
Points( Statistic( "Moving Range" ) ),
Limits( Sigma( "Moving Range" ) )
)
);
//Hide the temporary control chart window
obj << ShowWindow( 0 );
//Remove existing/old graph from the window (if there is one)
Try( (holder << Child) << Delete );
//Wait a moment to show when the chart updates
Wait(0.2);
//Add the new graph
holder << Append( (H List Box( (obj << Report) << Clone Box )) );
//Close the temporary control chart
obj << Close Window;
);
//Script to update then chart and then call itself 15 seconds later
quickieScript = Expr(
//Load the chart in the window (run the script in the function)
UpdateData();
//Run this same script in 15 seconds
Schedule( 15, quickieScript );
);
//Start things off:
quickieScript;Re : Comment figer l'affichage de la carte de contrôle lorsque les données sont mises à jourDésolé j'ai raté les premières lignes. Voici la bonne.
------------
les noms par défaut ici ( 1 );
quickieScript = Expr (
Calendrier ( 15 , quickieScript );
//Ouvrir des exemples de données
dt = Ouvrir ( "$SAMPLE_DATA/Abrasion.jmp" );
// Une fonction qui mettra à jour le graphique
Mettre à jour les données = fonction ( {},
//Faire la carte de contrôle
obj = dt << Générateur de cartes de contrôle (
Variables( Y( :Abrasion ) ),
Graphique (
Position( 1 ),
Points( Statistique( "Individuel" ) ),
Limites( Sigma( « Portée mobile » ) )
),
Graphique (
Position( 2 ),
Points( Statistique( « Portée mobile » ) ),
Limites( Sigma( « Portée mobile » ) )
)
);
//Masquer la fenêtre de la carte de contrôle temporaire
objet << Afficher la fenêtre ( 0 );
//Supprime le graphique existant/ancien de la fenêtre (s'il y en a un)
Essayer ( (titulaire << Enfant ) << Supprimer );
//Ajouter le nouveau graphique
titulaire << Ajouter (( H Zone de liste ( (objet << Rapport ) << Boîte de clonage )));
//Ferme la carte de contrôle temporaire
objet << Fermer la fenêtre ;
);
//Ouvre une fenêtre pour afficher la nouvelle carte de contrôle et un bouton pour actualiser la carte
// Inclut un bouton pour exécuter le script ci-dessus.
nw = Nouvelle fenetre ( "Carte de contrôle" ,
Zone de liste V (
Boîte à boutons ( "Nouvelles données" , UpdateData() ),
titulaire = H Zone de liste ();
)
);
//Charge le premier graphique dans la fenêtre (exécute le script dans la fonction)
UpdateData();
);
quickieScript ;
Re : Comment figer l'affichage de la carte de contrôle lorsque les données sont mises à jourMerci. J'utilise le planificateur de fenêtres pour exécuter ce script et j'aime voir un graphique lorsque les données sont lues après (disons 15 secondes environ). Je reçois beaucoup de "carte de contrôle"). J'ai essayé votre exemple et je lui ai mis la tâche de la fenêtre (également la fonction Planifier) et j'obtiens de nombreuses "cartes de contrôle" 1, 2, 3, .. Y a-t-il de toute façon que l'on ne puisse obtenir que sur la carte ?
Ci-dessous ce que j'utilise. Merci
// Une fonction qui mettra à jour le graphique
Mettre à jour les données = fonction ( {},
//Faire la carte de contrôle
obj = dt << Générateur de cartes de contrôle (
Variables( Y( :Abrasion ) ),
Graphique (
Position( 1 ),
Points( Statistique( "Individuel" ) ),
Limites( Sigma( « Portée mobile » ) )
),
Graphique (
Position( 2 ),
Points( Statistique( « Portée mobile » ) ),
Limites( Sigma( « Portée mobile » ) )
)
);
//Masquer la fenêtre de la carte de contrôle temporaire
objet << Afficher la fenêtre ( 0 );
//Supprime le graphique existant/ancien de la fenêtre (s'il y en a un)
Essayer ( (titulaire << Enfant ) << Supprimer );
//Ajouter le nouveau graphique
titulaire << Ajouter (( H Zone de liste ( (objet << Rapport ) << Boîte de clonage )));
//Ferme la carte de contrôle temporaire
objet << Fermer la fenêtre ;
);
//Ouvre une fenêtre pour afficher la nouvelle carte de contrôle et un bouton pour actualiser la carte
// Inclut un bouton pour exécuter le script ci-dessus.
nw = Nouvelle fenetre ( "Carte de contrôle" ,
Zone de liste V (
Boîte à boutons ( "Nouvelles données" , UpdateData() ),
titulaire = H Zone de liste ();
)
);
//Charge le premier graphique dans la fenêtre (exécute le script dans la fonction)
UpdateData();
);
quickieScript ;
Re : Comment figer l'affichage de la carte de contrôle lorsque les données sont mises à jourJe vais peut-être dans la mauvaise direction ici, mais je pense que vous voulez que le graphique dans votre fenêtre soit remplacé lorsque de nouvelles données apparaissent plutôt que d'en ajouter un autre en dessous/après.Pour ce faire, supprimez l'ancien graphique avant d'en ajouter un nouveau.Voici un exemple:
names default to here( 1 );
//Open sample data
dt = Open("$SAMPLE_DATA/Abrasion.jmp");
//A variable used to hide part of the data
lastrow = 10;
//Hide data after the last row (simulates a smaller table)
df = dt << Data Filter(
Location( {696, 15} ),
Mode( Select( 0 ), Show( 1 ), Include( 1 ) ),
Add Filter(
columns( Transform Column( "Row", Formula( Row() ) ) ),
Where(
Transform Column( "Row", Formula( Row() ) ) <= lastrow
)
)
);
//A function that will update the chart
UpdateData = function( {},
//Add one row to the data table
lastrow++;
//Update the data filter (simulates getting more data)
df << Delete All;
df << Add Filter(
columns( Transform Column( "Row", Formula( Row() ) ) ),
Where(
Transform Column( "Row", Formula( Row() ) ) <= lastrow
)
);
//Make the control chart
obj = dt << Control Chart Builder(
Variables( Y( :Abrasion ) ),
Chart(
Position( 1 ),
Points( Statistic( "Individual" ) ),
Limits( Sigma( "Moving Range" ) )
),
Chart(
Position( 2 ),
Points( Statistic( "Moving Range" ) ),
Limits( Sigma( "Moving Range" ) )
)
);
//Hide the temporary control chart window
obj << ShowWindow(0);
//Remove existing/old graph from the window (if there is one)
Try( (holder << Child) << Delete );
//Add the new graph
holder << Append(( H List Box( (obj << Report) << Clone Box)));
//Close the temporary control chart
obj << Close Window;
);
//Open a window to show the new control chart and a button to refresh the chart
//Includes a button to run the script above.
nw = New Window("Control Chart",
V List Box(
Button Box("New Data", UpdateData() ),
holder = H List Box();
)
);
//Load the first chart in the window (run the script in the function)
UpdateData();