D'accord, j'ai une demande très précise et j'espère que cela ne vous dérangera pas trop, je suis très novice chez JMP, alors j'aimerais avoir de l'aide pour résoudre ce problème. On dirait que cela devrait être relativement facile (relatif parce que si cela avait été très facile, j'aurais peut-être déjà compris;).
Tâche: ouvrez un document Excel et importez des données (les paramètres par défaut fonctionnent parfaitement pour cette chaîne de données, du moins pour ce dont j'ai besoin)
- Une colonne est Time [sec], le reste est des données dans cette période. Ne concerne pour le moment que les données des colonnes Ch1 à Ch8. Et le temps bien sûr, mais ce n'est que pour le graphique.
- Une fois les données importées, j'aimerais que vous demandiez quelles colonnes représenter (G1-CH8), suivies d'une invite pour chaque canal, indiquant le décalage chimique (échelle dans ce cas, que l'on appelle décalage par jargon). La valeur de colonne multipliée par le numéro spécifique) correspond au produit chimique en question, ou même à un menu permettant de sélectionner le produit chimique dans une liste prédéfinie.
- Une fois que cela est terminé, il devrait être assez simple d'obtenir que le graphique montre les canaux spécifiés avec le décalage défini, ainsi que les valeurs de crête.
Raccords connus;
- importer plusieurs fichiers d'Excel ne semble pas aussi intelligent que les importations individuelles. Si nous pouvons spécifier quelles colonnes sont dans le processus d'importation, cela pourrait être éliminé car nous savons que time [sec] et CH1-CH8 sont numériques / continus.
Comme je l'ai dit, il semble que cela devrait être raisonnable, je me cognerais un peu la tête, mais cela aurait été vraiment utile hier, alors j'espère que quelqu'un sera prêt à aider à accélérer les choses pour tous les besoins futurs, merci d'avance !
Merci! C’est très pratique, cela ne prend que quelques minutes pour comprendre ce que j’ai besoin d’éditer pour pouvoir faire ce que je veux, je pourrais peut-être le rendre plus efficace à un moment donné une fois que je comprendrai mieux le script, mais c’est certainement le cas. ce que je veux le faire!
dt = Open();
col_list = dt << get column names( string );
Remove From( col_list, 1 ); // Remove time[sec] from list
cols_to_plot = {};
offset_list = {};
offset_cols = {};
// Define the graph builder commands in an expression for use by the OK button
graph_expr = Expr(
For( i = 1, i <= N Items( cols_to_plot ), i++,
new_name = cols_to_plot[i] || "-Offset";
Insert Into( offset_cols, new_name );
dt << New Column( new_name,
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( As Column( dt, cols_to_plot[i] ) * offset_list[i] )
);
);
// Now for the graph - build a text string and then execute it
gb_text = "\[gb = graph builder(
show control panel(0),
variables(
X( :Name( "Time[sec]" ) ),]\";
elements_txt = " ),
Elements( Line( X, ";
For( i = 1, i <= N Items( cols_to_plot ), i++,
If( i == 1,
// then
gb_text = gb_text || Eval Insert( "\!N\[ Y( :Name( "^offset_cols[i]^" ) ), ]\" )
,
// else
gb_text = gb_text || Eval Insert( "\!N\[ Y( :Name( "^offset_cols[i]^" ), Position( 1 ) ),]\" )
);
elements_txt = elements_txt || Eval Insert( "Y ( ^i^ ), " );
);
elements_txt = elements_txt || "Legend( 7 ) ) ,";
gb_text = gb_text || elements_txt || ") )";
Eval( Parse( gb_text ) );
);
nw = New Window( "Graph Chemicals",
Panel Box( "Select channels to graph",
Lineup Box( N Col( 2 ),
Text Box( "Column" ),
Text Box( "Offset" ),
cb1 = Check Box( "Ch1" ),
ch1_neb = Number Edit Box(),
cb2 = Check Box( "Ch2" ),
ch2_neb = Number Edit Box(),
cb3 = Check Box( "Ch3" ),
ch3_neb = Number Edit Box(),
cb4 = Check Box( "Ch4" ),
ch4_neb = Number Edit Box(),
cb5 = Check Box( "Ch5" ),
ch5_neb = Number Edit Box(),
cb6 = Check Box( "Ch6" ),
ch6_neb = Number Edit Box(),
cb7 = Check Box( "Ch7" ),
ch7_neb = Number Edit Box(),
cb8 = Check Box( "Ch8" ),
ch8_neb = Number Edit Box(),
),
),
Panel Box( "Actions",
H List Box(
okb = Button Box( "OK",
If( cb1 << get( 1 ),
Insert Into( cols_to_plot, col_list[5] );
offset_value = ch1_neb << get;
Insert Into( offset_list, offset_value );
);
If( cb2 << get( 1 ),
Insert Into( cols_to_plot, col_list[6] );
offset_value = ch2_neb << get;
Insert Into( offset_list, offset_value );
);
If( cb3 << get( 1 ),
Insert Into( cols_to_plot, col_list[7] );
offset_value = ch3_neb << get;
Insert Into( offset_list, offset_value );
);
If( cb4 << get( 1 ),
Insert Into( cols_to_plot, col_list[8] );
offset_value = ch4_neb << get;
Insert Into( offset_list, offset_value );
);
If( cb5 << get( 1 ),
Insert Into( cols_to_plot, col_list[9] );
offset_value = ch5_neb << get;
Insert Into( offset_list, offset_value );
);
If( cb6 << get( 1 ),
Insert Into( cols_to_plot, col_list[10] );
offset_value = ch6_neb << get;
Insert Into( offset_list, offset_value );
);
If( cb7 << get( 1 ),
Insert Into( cols_to_plot, col_list[11] );
offset_value = ch7_neb << get;
Insert Into( offset_list, offset_value );
);
If( cb8 << get( 1 ),
Insert Into( cols_to_plot, col_list[12] );
offset_value = ch8_neb << get;
Insert Into( offset_list, offset_value );
);
graph_expr;
nw << close window;
),
canb = Button Box( "Cancel", nw << close window ),
)
),
);
// Pre-check checkboxes if column exists
For( i = 1, i <= N Items( col_list ), i++,
If(
col_list[i] == "Ch1", cb1 << set( 1, 1 ),
col_list[i] == "Ch2", cb2 << set( 1, 1 ),
col_list[i] == "Ch3", cb3 << set( 1, 1 ),
col_list[i] == "Ch4", cb4 << set( 1, 1 ),
col_list[i] == "Ch5", cb4 << set( 1, 1 ),
col_list[i] == "Ch6", cb4 << set( 1, 1 ),
col_list[i] == "Ch7", cb4 << set( 1, 1 ),
col_list[i] == "Ch8", cb4 << set( 1, 1 ),
)
);
Un grand nombre de lignes de données brutes sont inutiles pour ce que nous faisons avec les données. Les nouvelles lignes modifiées sont donc placées beaucoup plus tard dans le tableur, mais il sera assez facile de travailler pour le moment, merci beaucoup!
Cela devrait vous aider à démarrer. Certaines techniques avancées ici, en particulier la création dynamique du graphique.
dt = New Table( "chemical", Add Rows( 10 ),
New Column( "Time[sec]", Numeric, "Continuous", Format( "Best", 12 ),
Set Values( [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] ) ),
New Column( "Ch1", Numeric, "Continuous", Format( "Best", 12 ),
Set Values(
[0.405479144770652, 0.96118725137785, 0.184666735585779,
0.0779315158724785, 0.27096574800089, 0.274306696141139,
0.499865497928113, 0.645765431923792, 0.850604736013338,
0.375170755432919] ) ),
New Column( "Ch2", Numeric, "Continuous", Format( "Best", 12 ),
Set Values(
[-1.49768617758238, 0.627178362585814, 0.444456848007608,
0.23009213128918, 0.191183820733896, -0.871513987372999,
0.117414289530274, 0.673226666360769, 2.21437748894808,
-0.757598019757669] ) ),
New Column( "Ch3", Numeric, "Continuous", Format( "Best", 12 ),
Set Values(
[0.58753531659022, 0.722538525937125, 0.305761067429557,
0.53906583529897, 0.635318850399926, 0.701098019722849,
0.746448054211214, 0.526889791944995, 0.749249363318086,
0.959693510085344] ) )
);
col_list = dt << get column names(string);
remove from(col_list, 1); // Remove time[sec] from list
cols_to_plot = {};
offset_list = {};
offset_cols = {};
// Define the graph builder commands in an expression for use by the OK button
graph_expr = expr(
for (i = 1, i <= nitems(cols_to_plot), i++,
new_name = cols_to_plot[i] || "-Offset";
insertinto(offset_cols, new_name);
dt << new column(new_name, Numeric, "Continuous", Format( "Best", 12 ),
Formula( as column(dt, cols_to_plot[i]) * offset_list[i] ) );
);
// Now for the graph - build a text string and then execute it
gb_text =
"\[gb = graph builder(
show control panel(0),
variables(
X( :Name( "Time[sec]" ) ),]\";
elements_txt = " ),
Elements( Line( X, ";
for (i = 1, i <= nitems(cols_to_plot), i++,
if (i == 1,
// then
gb_text = gb_text || evalinsert("\!N\[ Y( :Name( "^offset_cols[i]^" ) ), ]\");
,
// else
gb_text = gb_text || evalinsert("\!N\[ Y( :Name( "^offset_cols[i]^" ), Position( 1 ) ),]\");
);
elements_txt = elements_txt || evalinsert("Y ( ^i^ ), ");
);
elements_txt = elements_txt || "Legend( 7 ) ) ,";
gb_text = gb_text || elements_txt || ") )";
eval(parse(gb_text));
);
nw = new window("Graph Chemicals",
panel box("Select channels to graph",
lineup box(ncol(2),
text box("Column"), text box("Offset"),
cb1 = checkbox("Ch1"), ch1_neb = number edit box(),
cb2 = checkbox("Ch2"), ch2_neb = number edit box(),
cb3 = checkbox("Ch3"), ch3_neb = number edit box(),
cb4 = checkbox("Ch4"), ch4_neb = number edit box(),
),
),
panelbox("Actions",
hlistbox(
okb = button box("OK",
if (cb1 << get(1),
insertinto(cols_to_plot, col_list[1]);
offset_value = ch1_neb << get;
insertinto(offset_list, offset_value);
);
if (cb2 << get(1),
insertinto(cols_to_plot, col_list[2]);
offset_value = ch2_neb << get;
insertinto(offset_list, offset_value);
);
if (cb3 << get(1),
insertinto(cols_to_plot, col_list[3]);
offset_value = ch3_neb << get;
insertinto(offset_list, offset_value);
);
if (cb4 << get(1),
insertinto(cols_to_plot, col_list[4]);
offset_value = ch4_neb << get;
insertinto(offset_list, offset_value);
);
graph_expr;
nw << close window;
),
canb = button box("Cancel", nw << close window;
),
)
),
);
// Pre-check checkboxes if column exists
for (i = 1, i <= nitems(col_list), i++,
if (col_list[i] == "Ch1", cb1 << set(1, 1),
col_list[i] == "Ch2", cb2 << set(1, 1),
col_list[i] == "Ch3", cb3 << set(1, 1),
col_list[i] == "Ch4", cb4 << set(1, 1),
);
);
JMP 14 est ce que j'ai, et oui, Ch1 etc ... est le nom des colonnes. J'ai découvert l'onglet échelle / décalage et je peux l'utiliser pour entrer manuellement le décalage chimique, mais je cherche à automatiser le processus afin qu'il ne soit pas nécessaire de le faire à chaque fois pour chaque produit chimique sur chaque canal.
Le type de graphique est une ligne, le temps est la valeur X et le ou les canaux sont la valeur Y.

J'essaie de comprendre comment l'automatiser à l'aide de JSL mais je suis toujours très novice en matière d'interface et certaines choses qui pourraient être intuitives ne cliquent pas encore. Le fichier Excel est généré automatiquement à partir d'un autre programme et est donc toujours au même format. Il ne devrait pas être très difficile de créer un script pour rechercher les colonnes spécifiées, je ne suis tout simplement pas familiarisé avec le langage de script. J'espère que quelqu'un aura peut-être déjà un script faisant quelque chose de similaire que je puisse modifier selon mes besoins. Je peux être assez pratique pour sélectionner un script et le faire faire ce que je veux, mais pas très bien pour l'écrire à partir de zéro.
Merci pour l'information!
Damion,
Vous n'avez pas mentionné la version de JMP que vous utilisez et le graphique / la plate-forme JMP que vous utiliseriez. La première ligne de chacune de ces colonnes contient également le nom chimique ou ne contient que les noms Ch1, Ch2, ..., Ch8.
JMP a une interface assez standard pour les graphiques et les analyses. Je suppose que vous pouvez utiliser Fit Y par X, où Y représente les produits chimiques (Ch1-Ch8) et X correspond à Time [sec]. Avant d'ajouter chaque produit chimique, cliquez avec le bouton droit de la souris et sélectionnez Transformer> Décalage d'échelle , voir la capture d'écran. Utilisez 1 pour le multiplicateur et spécifiez le décalage. Utilisez le produit chimique transformé pour Y.

Ce n'est pas une invite automatique, mais une méthode pour le faire via l'interface utilisateur.
Bien entendu, votre tâche peut être automatisée et adaptée à vos besoins spécifiques à l'aide du langage de script JMP (JMP Scripting Language).
En ce qui concerne votre demande de lecture dans certaines colonnes Excel uniquement, il existe plusieurs méthodes, mais cela dépend de la configuration de votre fichier Excel ou de l'existence d'une connexion ODBC pour lire Excel comme base de données, etc. Si vous pouvez fournir une fiche Excel factice, vous obtiendrez peut-être une réponse plus précise.