Okay ho una richiesta molto specifica e spero che non ti disturbi troppo, sono molto nuova a JMP, quindi vorrei un po 'di aiuto a risolvere questo problema. Sembra che dovrebbe essere relativamente facile (relativo perché se fosse molto facile avrei potuto già capito;).
Attività: aprire il documento Excel e importare i dati (le impostazioni predefinite funzionano bene per questa particolare stringa di dati, almeno per quello che mi serve)
- Una colonna è Tempo [sec], il resto è dati in quel periodo di tempo. Solo preoccupato per il momento con i dati nelle colonne Ch1-Ch8. E ovviamente, ma è solo per il grafico.
- Una volta importati i dati mi piacerebbe avere un prompt chiedendomi quali colonne tracciare (CH1-CH8) seguito da un prompt per ogni canale che chiede quale sia l'offset chimico (scala in questo caso, appena indicata come offset per gergo. Il valore specifico della colonna indica il tempo specifico per la sostanza chimica in questione, o anche solo un menu per selezionare la sostanza chimica da un elenco predefinito.
- Una volta completato, dovrebbe essere abbastanza semplice far sì che il grafico mostri i canali specificati con l'offset calcolato, oltre ai valori di picco.
Hangup noti;
- l'importazione di più file da excel sembra non essere intelligente quanto le singole importazioni, se è possibile specificare quali colonne sono presenti nel processo di importazione questo potrebbe essere eliminato poiché sappiamo che il tempo [sec] e CH1-CH8 sono numerici / continui.
Come ho detto, sembra che dovrebbe essere ragionevole, avrei battuto la mia testa per un po 'ma sarebbe stato davvero utile ieri, quindi spero che qualcuno sia disposto ad aiutare ad accelerare le cose per qualsiasi necessità futura, grazie in anticipo !
Grazie! Questo è molto praticabile, ci sono voluti solo pochi minuti per capire cosa dovevo modificare in modo che potesse fare ciò che volevo, potrei essere in grado di renderlo più efficiente ad un certo punto una volta che ho capito meglio lo script, ma questo certamente lo fa cosa voglio che faccia!
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 ),
)
);
Ci sono un sacco di righe di dati non necessari per ciò che facciamo con i dati, quindi mette le nuove linee modificate molto più tardi nel foglio di calcolo, ma per ora sarà abbastanza facile lavorare con, grazie mille!
Questo dovrebbe farti cominciare. Alcune tecniche avanzate qui, in particolare la creazione dinamica del grafico.
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 è quello che ho, e sì, Ch1 ecc ... sono i nomi effettivi delle colonne. Ho scoperto la scheda scala / offset e posso usarla per inserire manualmente l'offset chimico, ma sto cercando di automatizzare il processo in modo che non sia necessario eseguirlo ogni volta per ogni sostanza chimica su ogni singolo canale.
Il tipo di grafico è una linea, il tempo è il valore X e il canale (i) è il valore Y.

Sto cercando di capire come automatizzarlo usando JSL ma sono ancora veramente nuovo con l'interfaccia e alcune cose che potrebbero essere intuitive non stanno ancora facendo clic. Il file Excel viene generato automaticamente da un altro programma, quindi è sempre nello stesso formato. Non dovrebbe essere terribilmente difficile copiarlo per cercare le colonne specificate, semplicemente non ho ancora familiarità con il linguaggio di scripting. Spero che qualcuno possa già avere uno script che fa qualcosa di simile che posso modificare per le mie esigenze, posso essere abbastanza utile nel selezionare una sceneggiatura e farla fare quello che voglio, ma non è così bello scriverne una da zero.
Grazie per l'informazione!
Damion,
Non hai menzionato quale versione di JMP stai usando e quale grafico / piattaforma JMP useresti. Inoltre, la prima riga in ciascuna di queste colonne memorizza il nome chimico o i nomi sono solo Ch1, Ch2, ..., Ch8
JMP ha un'interfaccia abbastanza standard per i grafici e le analisi. Suppongo che tu possa utilizzare Fit Y per X, dove Y sono i prodotti chimici (Ch1-Ch8) e X è Time [sec]. Prima di aggiungere ciascuna sostanza chimica, fare clic con il tasto destro e selezionare Trasforma> Scala offset , guarda lo screenshot. Utilizzare 1 per il moltiplicatore e specificare l'offset. Usa la sostanza chimica trasformata per Y.

Questo non è un prompt automatico, ma un metodo per farlo tramite l'interfaccia utente (UI).
Naturalmente, il tuo compito può essere automatizzato e adattato alle tue esigenze specifiche utilizzando il JMP Scripting Language (JSL).
Per quanto riguarda la richiesta di leggere solo le colonne selezionate di Excel, ci sono diversi metodi per farlo, ma dipende da come è configurato il file excel o se si dispone di una connessione ODBC per leggere Excel come base dati, ecc. Se puoi fornire un foglio excel fittizio potresti ottenere una risposta più specifica.