Sto tracciando un grafico CD vs. Profondità, per un totale di 8 set nell'esempio (Aa, Ab, Ba, Bb...). Per ogni test A~D, ci sono 2 diverse "Posizioni" a e b.
Vorrei selezionare 2 set specifici e creare un grafico delta; ad esempio, se seleziono Aa e Ba, i valori CD vengono sottratti a ciascuna profondità e dovrebbe essere generato un grafico CD vs. profondità.
È qualcosa che posso fare con JMP? Stavo provando a farlo in Excel usando la funzione xlookup, ma poiché la quantità di dati è enorme (oltre 30000 righe) è semplicemente troppo lento. Non sono sicuro che sia qualcosa che posso fare con JMP.
Esempio di set di dati

Esempio di grafico CD vs. profondità;

Con lo scripting questo può sicuramente essere fatto e forse anche senza scripting almeno come flusso di lavoro. Puoi fornire un set di dati di esempio e puoi scegliere solo due coppie contemporaneamente? Inoltre, la posizione è sempre la stessa per i test selezionati?
Certo, ecco il file di dati di esempio.
Voglio ottenere il valore delta tra due coppie, quindi sì, sceglierei sempre 2 per il confronto.
La posizione potrebbe non essere la stessa, nel set di dati reale ho alcuni campioni che hanno più posizioni. Devo anche confrontare campione con campione e posizione con posizione. Ad esempio, campione Aa con campione Cb
Ecco qui
Va bene se viene creata una nuova tabella dati dopo le selezioni dell'utente? La mia idea di base sarebbe con scripting:
- Aggiungi una colonna di ordinamento ai tuoi dati
- Crea un'interfaccia utente in cui l'utente può scegliere dalla casella di riepilogo quali combinazioni confrontare
- L'utente preme OK e verrà creata una nuova tabella con i dati per quelle due combinazioni
- La differenza verrà calcolata
- Visualizza i dati
Un'altra opzione che mi viene in mente è quella di dividere i dati e precalcolare tutte le differenze in colonne. Quindi potresti usare Column Switcher nel graph builder per cambiare cosa confrontare.
Volevo vedere se posso cambiare rapidamente le condizioni per il confronto. Sembra che non sia così semplice.
Penso che calcolare tutte le differenze non funzionerebbe, dato che i set di dati sono così tanti.
Grazie per l'aiuto, fammi riflettere ancora un po'.
Mi vengono in mente solo opzioni di scripting (a parte quella suddivisione). Considero le tabelle JMP più simili a tabelle di database che a fogli di calcolo, quindi i calcoli vengono (solitamente) eseguiti a livello di riga e come aggregazioni. Se il conteggio dei test è sempre lo stesso per ciascuna delle "coppie", questo può essere fatto con alcune colonne di formule e un filtro di dati globali per semplificare la scelta delle opzioni.
Con la scrittura di script puoi creare cose come questa (mancano alcuni controlli di integrità)
Names Default To Here(1);
dt = Current Data Table();
dt << New Column("Group", Character, Nominal, Formula(
"Test: " || :Test || " Location: " || :Location
));
Summarize(dt, groups = By(:Group));
dt_temp = New Table("TEMPTABLE",
Add Rows(5), // same as your group size
Compress File When Saved(1),
New Column("Depth",
Numeric,
"Continuous",
Values([0, 20, 40, 60, 80])
),
New Column("CD First",
Numeric,
"Continuous"
),
New Column("CD Second",
Numeric,
"Continuous"
),
New Column("CD diff",
Numeric,
"Continuous"
),
Invisible
);
update_expr = Expr(
Try(
first_group = (lb_first << get selected)[1];
second_group = (lb_second << get selected)[1];
first_cd = dt[dt << Get Rows Where(:Group == first_group), "CD (nm)"];
second_cd = dt[dt << Get Rows Where(:Group == second_group), "CD (nm)"];
dt_temp[0, "CD First"] = first_cd;
dt_temp[0, "CD Second"] = second_cd;
dt_temp[0, "CD Diff"] = Abs(second_cd - first_cd);
,
dt_temp[0, "CD First"] = [., . ,., ., .];
dt_temp[0, "CD Second"] = [., . ,., ., .];
dt_temp[0, "CD Diff"] = [., . ,., ., .];
);
);
nw = New Window("Demo",
H List Box(
Panel Box("Pick First Group",
lb_first = List Box(groups)
),
Panel Box("Pick Second Group",
lb_second = List Box(groups)
),
Data Table Box(dt_temp),
gb = dt_temp << Graph Builder(
Size(525, 454),
Show Control Panel(0),
Variables(X(:CD diff), Y(:Depth)),
Elements(Points(X, Y, Legend(11)), Line(X, Y, Legend(13)))
),
Panel Box("Actions",
Lineup Box(N Col(1),
Button Box("Cancel")
)
)
)
);
lb_first << Set Max Selected(1);
lb_second << Set Max Selected(1);
lb_first << Set Script(update_expr);
lb_second << Set Script(update_expr);
Eval(EvalExpr(
nw << On Close(
Close(dt_temp, no save);
)
));

Penso che potresti anche duplicare la tua tabella in modo da poter fare un'auto-unione con colonne "duplicate", unirla alla tabella originale per profondità, rimuovere le auto-unioni, creare un selettore di raggruppamento, una formula per le differenze e creare un grafico

E questo è facile da automatizzare in JMP.
