grafici interattiviQualcuno ha idee su come creare report interattivi?
Nel report, voglio includere grafici con più linee in ogni grafico. Sul lato sinistro della finestra, vorrei avere un elenco delle linee. Quando clicco su una linea dall'elenco, voglio che la linea selezionata nel grafico sia più evidente, mentre le linee rimanenti sono sbiadite.
Esplorazione e visualizzazione dei datiRe: grafici interattiviAvere la legenda sul lato sinistro può essere un po' complicato, ma se il lato destro va bene, il generatore di grafici di base dovrebbe essere sufficiente

https://www.jmp.com/support/help/en/18.0/#page/jmp/graph-builder.shtml#
Re: grafici interattiviCiao! Ho usato un ciclo for per creare più grafici usando il graph builder. Ora, vorrei raggruppare tutti questi grafici in un singolo foglio e creare un'interfaccia interattiva per consentire agli utenti di interagire con tutti i grafici insieme. C'è un modo per riuscirci? Grazie!
Re: grafici interattiviÈ una bella idea usare solo il generatore di grafici di base, io voglio solo metterli tutti insieme, uno sotto l'altro, dopo averli creati tutti.
Re: grafici interattiviSono necessarie altre informazioni. Ad esempio, potresti raccoglierle in V List Box e poi visualizzarle usando Nuova finestra
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
gb_collector = V List Box();
For(i = 1, i <= 3, i++,
gb_collector << Append(
dt << Graph Builder(
Variables(X(:weight), Y(:height), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11)))
)
)
);
nw = New Window("",
gb_collector
);
Se stai utilizzando il ciclo For, presumo che tu stia facendo scripting. Hai letto la Scripting Guide (ad esempio https://www.jmp.com/support/help/en/18.0/#page/jmp/examples-of-creating-a-dashboard-from-two-reports.shtml# ).
Re: grafici interattiviVorrei combinare il metodo della casella della pagina delle schede con il ciclo for, ma non funziona.
Ecco la mia parte della sceneggiatura:
Nuova finestra ("La mia dashboard",
Scatola di divisione H (
Dimensioni (1000, 1000),
// Ciclo per ogni parametro
Per(i = 1, i <= N Elementi(numPar), i++,
// Caselle di colonna per i grafici di tutti i lotti, dati effettivi e differenza
col1 = Colonna Box(""),
col2 = Colonna Box(""),
col3 = Colonna Box(""),
// Casella della pagina Tab per ogni parametro
Casella della pagina della scheda (
Titolo(numPar[i] || " vs. Punto temporale"),
// Crea tutti i batch del grafico
gb = Costruttore grafico(
Dimensioni (500, 500),
Variabili(X(:Punto temporale Mesi), Y(:Risultato), Overlay(:Batch)),
Elementi(Punti(X, Y))
),
// Filtro locale: imposta il batch solo sui batch che sono in cyc con un riferimento, non su tutti gli altri batch
gb << Filtro dati locali(
invisibile,
Aggiungi filtro(colonne(:Componente, :Batch, :Tabella sorgente),
Dove(:Componente == numPar[i]),
Dove(:Batch == {cyc, bat}),
Dove(:Tabella sorgente == dt_name)
)
),
dt << Cancella Seleziona(),
// Rimuovi la visualizzazione del filtro dal grafico
gb << Mostra pannello di controllo(0),
// Segnalazione di modifica della trama
gbb = Segnala(gb)[GraphBuilderBox(1)],
// Aggiungere regressione lineare
gbb << Aggiungi elemento(1, 1, {Tipo("Linea di adattamento"), X, Y, Fiducia di adattamento(0), Equazione(0)}),
// Imposta l'asse Y
minval = min(:Result[dt << ottieni righe dove(:Componente == numPar[i] & :Batch == cyc & :Tabella sorgente == dt_name | :Batch == bat & :Componente == numPar[i] & :Tabella sorgente == dt_name)]) * 0,95,
maxval = max(:Result[dt << ottieni righe dove(:Componente == numPar[i] & :Batch == cyc & :Tabella sorgente == dt_name | :Batch == bat & :Componente == numPar[i] & :Tabella sorgente == dt_name)]) * 1.05,
maxvalts = max(:Punto temporale Mesi[dt << ottieni righe dove(:Componente == numPar[i] & :Batch == cyc & :Tabella sorgente == dt_name | :Batch == bat & :Componente == numPar[i] & :Tabella sorgente == dt_name)]) * 1.05,
gbb[AsseBox(1)] << min(-0.1),
gbb[AxisBox(1)] << max(valori massimi),
gbb[AxisBox(2)] << min(valore minimo),
gbb[AxisBox(2)] << max(valoremassimo),
gbb[AxisBox(2)] << inc((valore massimo - valore minimo) / 10),
// Imposta l'etichetta dell'asse Y
unitList = Array associativo(:Unità risultato[dt << ottieni righe dove(:Componente == numPar[i] & :Batch == cyc & :Tabella sorgente == dt_name | :Batch == bat & :Componente == numPar[i] & :Tabella sorgente == dt_name)]) << Rimuovi("") << Ottieni chiavi,
Se(N Elementi(unitList) == 1,
gbb[Casella di modifica testo(4)] << Imposta testo(numPar[i] || " [" || unitList[1] || "]")
,
gbb[Casella di modifica testo(4)] << Imposta testo(numPar[i])
),
// Imposta il titolo del grafico
gbb[Casella di modifica testo(1)] << Imposta testo(numPar[i] || " vs. Punto temporale"),
// Aggiungi
gbba = Segnala(gb),
col1 << Aggiungi(gbba),
< )
)
),
< );
Re: grafici interattiviNames Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
gb_collector = Tab Box(<< Set Style("Horizontal Spread"));
For(i = 1, i <= 3, i++,
gb_collector << Add("Title",
dt << Graph Builder(
Variables(X(:weight), Y(:height), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11)))
)
)
);
nw = New Window("",
gb_collector
);Re: grafici interattiviQuale versione di jmp hai? Funziona nel tuo jmp? Perché non ho l'output previsto usando lo script sopra
Re: grafici interattiviNon so qual è l'output previsto e non ho i tuoi dati. Lo script usa Tab Box per raccogliere i risultati dal ciclo for

Re: grafici interattiviHo questo output quando eseguo lo script sopra. Non è lo stesso che hai tu
Re: grafici interattiviSembra che l'abbiano cambiato in JMP18. In JMP17.2 sembrava funzionare
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
gb_collector = Tab Box(<< Set Style("Horizontal Spread"));
For(i = 1, i <= 3, i++,
tab = Tab Page Box("",
gb = dt << Graph Builder(
Variables(X(:weight), Y(:height), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11)))
)
);
tab << Title("Title " || Char(i));
gb << title(Char(i));
gb_collector << Append(tab)
);
nw = New Window("",
gb_collector
);Re: grafici interattiviUn altro problema che vorrei affrontare è quando ho un gran numero di schede (ad esempio, 20) con titoli lunghi, i grafici diventano sproporzionatamente grandi, rendendo difficile osservarli chiaramente. Vorrei ridimensionare i grafici a una scala più piccola mantenendo i titoli e le schede grandi. È possibile posizionare il grafico a sinistra con spazio vuoto a destra?
Re: grafici interattiviNon sono sicuro di cosa intendi con "grafico a sinistra con spazio vuoto a destra". Crea il grafico manualmente, ridimensionalo un po', copia lo script e ti dirà come puoi aggiungere dimensioni al grafico. Tab Box ha anche overflow e altre opzioni che puoi trovare nell'indice di scripting

Re: grafici interattiviSto cercando di capire se c'è un modo per posizionare i grafici come in questo screenshot. Ad esempio, prima il primo grafico e poi gli altri due insieme.
Re: grafici interattiviAd esempio, è possibile combinare V List Box, H List Box, Tab Box, Tab Page Box in molti modi diversi per ottenere il layout desiderato.
Puoi trovare molte informazioni nella Guida allo scripting https://www.jmp.com/support/help/en/18.0/#page/jmp/construct-display-boxes-for-new-windows.shtml
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
gb_expr = Expr(dt << Graph Builder(
Show Control Panel(0),
Variables(X(:weight), Y(:height), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11)))
));
nw = New Window("",
V List Box(
gb_expr,
H List Box(
gb_expr,
gb_expr
)
)
);Re: grafici interattiviI nomi predefiniti sono qui (1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
gb_collector = Scheda Box( "Dashboard" );
Per( i = 1, i <= 20, i++,
// Casella di colonna per il grafico di tutti i lotti
col1 = Col Box( "Tutti i lotti" || Char( i ) );
// Crea il primo grafico del Graph Builder
gb = Espr(
dt << Costruttore grafico(
invisibile,
Variabili( X( :peso ), Y( :altezza ), Sovrapposizione( :sesso ) ),
Elementi (Punti (X, Y, Legenda (9)), Linea di adattamento (X, Y, Legenda (11))
)
);
col1 << Aggiungi( gb );
// Crea una casella di colonna per i due grafici del Graph Builder
col2 = Col Box( "Dati effettivi" || Char( i ) );
// Crea e aggiungi due grafici Graph Builder a col2
Per( j = 1, j <= 2, j++,
gbb = Espr(
dt << Costruttore grafico(
invisibile,
Variabili( X( :peso ), Y( :altezza ), Sovrapposizione( :sesso ) ),
Elementi (Punti (X, Y, Legenda (9)), Linea di adattamento (X, Y, Legenda (11))
)
);
col2 << Aggiungi( gbb );
);
// Crea una scheda per col1 e col2 e aggiungila a gb_collector
tab = Tab Pagina Box( " Qualcosa Qualcosa ",
V Casella di elenco(
col1,
H List Box( col2 ) // Posizionamento dei due grafici uno accanto all'altro
)
);
gb_collector << Aggiungi( tab );
// Imposta il titolo per gb
gb << titolo( "dxfkgbdlk,xfhglihxfd" );
);
gb_collector << Ancorabile( 1 );
gb_collector << Imposta Overflow abilitato( 1 );
nw = Nuova finestra( "Dashboard",
gb_collezionista
);
Sto provando a usare l'esempio di cui sopra nel mio script. Ma non ottengo alcun output. Ecco il mio script:
Tabella dati correnti (dt);
dt << Nuova colonna("Punto temporale Mesi", Formula(Round(:Punto temporale Giorni/30.438), 2));
gb_collector = Casella delle schede();
Per(i = 1, i <= N Elementi(numPar), i++,
// Casella di colonna per il grafico di tutti i lotti
col1 = Colonna Box( "" );
// Casella di colonna per il grafico dei dati effettivi
col2 = Colonna Box( "" );
// Casella di colonna per il grafico della differenza
col3 = Colonna Box( "" );
//tab = Casella della pagina della scheda("",
gb = dt << Generatore grafico(
//invisibile,
Dimensioni (700, 400),
Variabili(X(:Punto temporale Mesi), Y(:Risultato), Overlay(:Batch)),
Elementi(Punti(X, Y))
);
// Filtro locale: imposta il batch solo sui batch che sono in cyc con un riferimento, non su tutti gli altri batch
gb << Filtro dati locali(
invisibile,
Aggiungi filtro(colonne(:Componente, :Batch, :Tabella sorgente),
Dove(:Componente == numPar[i]),
Dove(:Batch == {cyc, bat}),
Dove(:Tabella sorgente == dt_name)
)
);
dt << Cancella Seleziona();
// Rimuovi la visualizzazione del filtro dal grafico
gb << Mostra pannello di controllo(0);
// Segnalazione di modifica trama
gbb = Report(gb)[GraphBuilderBox(1)];
// Aggiungere regressione lineare
gbb << Aggiungi elemento(1, 1, {Tipo("Linea di adattamento"), X, Y, Fiducia di adattamento(0), Equazione(0)});
// Imposta l'asse Y
minval = min(:Result[dt << ottieni righe dove(:Componente == numPar[i] & :Batch == cyc & :Tabella sorgente == dt_name | :Batch == bat & :Componente == numPar[i] & :Tabella sorgente == dt_name)]) * 0,95;
maxval = max(:Result[dt << ottieni righe dove(:Componente == numPar[i] & :Batch == cyc & :Tabella sorgente == dt_name | :Batch == bat & :Componente == numPar[i] & :Tabella sorgente == dt_name)]) * 1.05;
maxvalts = max(:Punto temporale Mesi[dt << ottieni righe dove(:Componente == numPar[i] & :Batch == cyc & :Tabella sorgente == dt_name | :Batch == bat & :Componente == numPar[i] & :Tabella sorgente == dt_name)]) * 1.05;
gbb[AsseBox(1)] << min(-0.1);
gbb[AxisBox(1)] << max(valori massimi);
gbb[AxisBox(2)] << min(valore minimo);
gbb[AxisBox(2)] << max(valoremassimo);
gbb[AxisBox(2)] << inc((valore massimo - valore minimo) / 10);
// Imposta l'etichetta dell'asse Y
unitList = Array associativo(:Unità risultato[dt << ottieni righe dove(:Componente == numPar[i] & :Batch == cyc & :Tabella sorgente == dt_name | :Batch == bat & :Componente == numPar[i] & :Tabella sorgente == dt_name)]) << Rimuovi("") << Ottieni chiavi;
Se(N Elementi(unitList) == 1,
gbb[Casella di modifica testo(4)] << Imposta testo(numPar[i] || " [" || unitList[1] || "]")
,
gbb[Casella di modifica testo(4)] << Imposta testo(numPar[i])
);
// Imposta il titolo del grafico
gbb[Casella di modifica testo(1)] << Imposta testo(numPar[i] || " vs. Punto temporale");
// Aggiungi
//gbba = Segnala(gb),
col1 << Aggiungi(gb);
//filtro << chiudi;
gb << chiudi finestra;
// All'interno del ciclo attraverso i parametri ora stiamo anche eseguendo un ciclo attraverso i batch
Per(k = 1, k <= N elementi( cyc ), k++,
check = dt << ottieni righe dove(:Componente == numPar[i] & :Batch == cyc[k] & :Tabella sorgente == dt_name | :Batch == bat[k] & :Componente == numPar[i] & :Tabella sorgente == dt_name);
if(N items(check) > 0, // Crea un controllo per vedere se il parametro esiste per il batch corrente
// Crea grafico di base
gb = Costruttore grafico(
//invisibile,
Dimensioni (700, 400),
Variabili (X( :Punto temporale Mesi), Y( :Risultato), Sovrapposizione( :Batch ) ),
Elementi (Punti (X, Y), )
);
gb << Filtro dati locali(invisibile, Aggiungi filtro( colonne( :Componente, :Batch, :Tabella sorgente ), Dove( :Componente == numPar[i] ), Dove( :Batch == {cyc[k], bat[k]}), Dove( :Tabella sorgente == dt_name) ));
dt << Cancella Seleziona();
// Rimuovi la visualizzazione del filtro dal grafico
gb << Mostra pannello di controllo( 0 );
// Segnalazione di modifica trama
gbb = Report( gb )[GraphBuilderBox( 1 )];
// Aggiungere regressione lineare
gbb << Aggiungi elemento( 1, 1, {Tipo( "Linea di adattamento" ), X, Y, Fiducia di adattamento( 0 ), Equazione( 0 )} );
// Imposta l'asse Y
minval = min(:Result[dt << ottieni righe dove(:Componente == numPar[i] & :Batch == cyc[k] & :Tabella sorgente == dt_name | :Batch == bat[k] & :Componente == numPar[i] & :Tabella sorgente == dt_name)])*0.95;
maxval = max(:Result[dt << ottieni righe dove(:Componente == numPar[i] & :Batch == cyc[k] & :Tabella sorgente == dt_name| :Batch == bat[k] & :Componente == numPar[i] & :Tabella sorgente == dt_name)])*1.05;
maxvalts = max(:Punto temporale Mesi[dt << ottieni righe dove(:Componente == numPar[i] & :Batch == cyc[k] & :Tabella sorgente == dt_name| :Batch == bat[k] & :Componente == numPar[i] & :Tabella sorgente == dt_name)])*1.05;
gbb[AsseBox(1)] << min(-0.1);
gbb[AxisBox(1)] << max(valori massimi);
gbb[AxisBox(2)] << min(valore minimo);
gbb[AxisBox(2)] << max(valoremassimo);
gbb[AxisBox(2)] << inc((valore massimo-valore minimo)/10);
// Imposta l'etichetta dell'asse Y
unitList = Array associativo( :Unità risultato[dt << ottieni righe dove(:Componente == numPar[i] & :Batch == cyc[k] & :Tabella sorgente == dt_name | :Batch == bat[k] & :Componente == numPar[i] & :Tabella sorgente == dt_name)] ) << Rimuovi( "" ) << Ottieni chiavi;
Se( N Elementi( unitList ) == 1,
gbb[Casella di modifica testo( 4 )] << Imposta testo( numPar[i] || " [" || unitList[1] || "]" )
);
Se( N Elementi( unitList ) != 1,
gbb[Casella di modifica testo( 4 )] << Imposta testo( numPar[i] )
);
// Imposta il titolo del grafico
gbb[Casella di modifica del testo( 1 )] << Imposta testo( numPar[i] || " vs. Punto temporale ");
// Aggiungi
//gbba = Rapporto(gbb);
col2 << Aggiungi( gbb );
//filtro << chiudi;
gb << chiudi finestra;
// Inizia il secondo grafico
gb2 = Costruttore grafico(
//invisibile,
Dimensioni (700, 400),
Variabili (X(Punto temporale Mesi), Y( :Differenza ), Colore( :Batch ) ),
Elementi (Punti (X, Y))
);
gb2 << Filtro dati locali(invisibile, Aggiungi filtro( colonne( :Componente, :Batch, :Tabella sorgente ), Dove( :Componente == numPar[i] ), Dove( :Batch == cyc[k]), Dove( :Tabella sorgente == dt5_name)));
dt4 << Cancella Seleziona();
// Rimuovi la visualizzazione del filtro dal grafico
gb2 << Mostra pannello di controllo( 0 );
// Segnalazione di modifica trama
gbb2 = Report( gb2 )[GraphBuilderBox( 1 )];
gbb2 << Aggiungi elemento( 1, 1, {Tipo( "Linea" ), X, Y} );
// Ottieni il valore HC
l_idx = dt4 << Ottieni righe where(dt4:Component == numPar[i] & :Batch == cyc[k]);
ul = min(dt4:HC[l_idx]);
se(manca(ul),
if(min(:Differenza[dt << ottieni righe where(:Componente == numPar[i] & :Batch == cyc[k] & :Tabella sorgente == dt5_name)]) == 0,
valore minimo = -5;
valore massimo = 5,
minval = min(:Differenza[dt << ottieni righe dove(:Componente == numPar[i] & :Batch == cyc[k] & :Tabella sorgente == dt5_name)])*0.95;
maxval = max(:Differenza[dt << ottieni righe dove(:Componente == numPar[i] & :Batch == cyc[k] & :Tabella sorgente == dt5_name)])*1.05;
),
minval = min(:Differenza[dt << ottieni righe dove(:Componente == numPar[i] & :Batch == cyc[k] & :Tabella sorgente == dt5_name)],-ul)*1.05;
maxval = max(:Differenza[dt << ottieni righe dove(:Componente == numPar[i] & :Batch == cyc[k] & :Tabella sorgente == dt5_name)], ul)*1.05;
);
if(!ismissing(ul), //se non c'è valore HC non creare la linea limite
gbb2[AxisBox(2)] << Aggiungi linea di riferimento(ul,"solido", nero, char(rotondo(ul,2)));
gbb2[AxisBox(2)] << Aggiungi linea di riferimento(-ul,"solid", black, char(round(-ul,2)));
);
gbb2[AxisBox(2)] << Aggiungi linea di riferimento(0,"Tratteggiata");
gbb2[AxisBox(2)] << min(valore minimo);
gbb2[AxisBox(2)] << max(valore massimo);
gbb2[AxisBox(2)] << inc((valore massimo-valore minimo)/10);
//Aggiungere
//gbba2 = Segnala( gbb2 );
col3 << Aggiungi( gbba2 );
//filtro << chiudi;
gb2 << chiudi finestra;
);
);
//);
tab = Casella pagina scheda(numPar[i],
V Casella di elenco(
col1
H List Box( col2, col3 ) // Posizionamento dei due grafici uno accanto all'altro
)
);
tab << Titolo(numPar[i]);
//gb << titolo(Carattere(1));
gb_collector << Aggiungi(tab);
);
gb_collector << Ancorabile( 1 );
gb_collector << Imposta Overflow abilitato( 1 );
nw = Nuova finestra("La mia dashboard",
gb_collezionista
);
puoi aiutarmi a capire come fare?
Re: grafici interattiviBisogna fare un passo indietro e spiegare cosa si desidera: nel migliore dei casi, fornire dati di esempio o utilizzare uno dei set di dati campione di JMP per spiegare cosa si desidera ottenere nel più piccolo esempio possibile.
Re: grafici interattiviNames Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb_collector = Tab Box("Dashboard");
For(i = 1, i <= 20, i++,
// Column box for plot of all batches
col1 = Col Box("All Batches" || Char(i));
// Create the first Graph Builder plot
gb = Expr(
dt << Graph Builder(
invisible,
Variables(X(:weight), Y(:height), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11)))
)
);
col1 << Append(gb);
// Create a column box for the two Graph Builder plots
col2 = Col Box("Actual Data " || Char(i));
// Create and append two Graph Builder plots to col2
For(j = 1, j <= 2, j++,
gbb = Expr(
dt << Graph Builder(
invisible,
Variables(X(:weight), Y(:height), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11)))
)
);
col2 << Append(gbb);
);
// Create a tab for col1 and col2 and append it to gb_collector
tab = Tab Page Box(
" Something Something ",
V List Box(
col1,
H List Box(col2) // Placing the two plots next to each other
)
);
gb_collector << Append(tab);
// Set title for gb
gb << title("Title");
);
gb_collector << Dockable(1);
gb_collector << Set Overflow Enabled(1);
nw = New Window("Dashboard", gb_collector);
Here is the example that i use and i am trying to follow the same structure in my own script.Re: grafici interattiviTabella dati correnti (dt);
dt << Nuova colonna("Punto temporale Mesi", Formula(Round(:Punto temporale Giorni/30.438), 2));
gb_collector = Casella della scheda();
Per(i = 1, i <= N Elementi(numPar), i++,
// Casella di colonna per il grafico di tutti i lotti
col1 = Colonna Box( "" );
// Casella di colonna per il grafico dei dati effettivi
col2 = Colonna Box( "" );
// Casella di colonna per il grafico della differenza
col3 = Colonna Box( "" );
//tab = Casella della pagina della scheda("",
gb = dt << Generatore grafico(
//invisibile,
Dimensioni (700, 400),
Variabili(X(:Punto temporale Mesi), Y(:Risultato), Overlay(:Batch)),
Elementi(Punti(X, Y))
);
// Filtro locale: imposta il batch solo sui batch che sono in cyc con un riferimento, non su tutti gli altri batch
gb << Filtro dati locali(
invisibile,
Aggiungi filtro(colonne(:Componente, :Batch, :Tabella sorgente),
Dove(:Componente == numPar[i]),
Dove(:Batch == {cyc, bat}),
Dove(:Tabella sorgente == dt_name)
)
);
dt << Cancella Seleziona();
// Rimuovi la visualizzazione del filtro dal grafico
gb << Mostra pannello di controllo(0);
// Segnalazione di modifica della trama
gbb = Report(gb)[GraphBuilderBox(1)];
// Aggiungere regressione lineare
gbb << Aggiungi elemento(1, 1, {Tipo("Linea di adattamento"), X, Y, Fiducia di adattamento(0), Equazione(0)});
// Imposta l'asse Y
minval = min(:Result[dt << ottieni righe dove(:Componente == numPar[i] & :Batch == cyc & :Tabella sorgente == dt_name | :Batch == bat & :Componente == numPar[i] & :Tabella sorgente == dt_name)]) * 0,95;
maxval = max(:Result[dt << ottieni righe dove(:Componente == numPar[i] & :Batch == cyc & :Tabella sorgente == dt_name | :Batch == bat & :Componente == numPar[i] & :Tabella sorgente == dt_name)]) * 1.05;
maxvalts = max(:Punto temporale Mesi[dt << ottieni righe dove(:Componente == numPar[i] & :Batch == cyc & :Tabella sorgente == dt_name | :Batch == bat & :Componente == numPar[i] & :Tabella sorgente == dt_name)]) * 1.05;
gbb[AxisBox(1)] << min(-0.1);
gbb[AxisBox(1)] << max(valori massimi);
gbb[AxisBox(2)] << min(valore minimo);
gbb[AxisBox(2)] << max(valore massimo);
gbb[AxisBox(2)] << inc((valore massimo - valore minimo) / 10);
// Imposta l'etichetta dell'asse Y
unitList = Array associativo(:Unità risultato[dt << ottieni righe dove(:Componente == numPar[i] & :Batch == cyc & :Tabella sorgente == dt_name | :Batch == bat & :Componente == numPar[i] & :Tabella sorgente == dt_name)]) << Rimuovi("") << Ottieni chiavi;
Se(N Elementi(unitList) == 1,
gbb[Casella di modifica testo(4)] << Imposta testo(numPar[i] || " [" || unitList[1] || "]")
,
gbb[Casella di modifica testo(4)] << Imposta testo(numPar[i])
);
// Imposta il titolo del grafico
gbb[Casella di modifica testo(1)] << Imposta testo(numPar[i] || " vs. Punto temporale");
// Aggiungi
//gbba = Segnala(gb),
col1 << Aggiungi(gb);
//filtro << chiudi;
gb << chiudi finestra;
// All'interno del ciclo attraverso i parametri ora stiamo anche eseguendo un ciclo attraverso i batch
Per(k = 1, k <= N elementi( cyc ), k++,
check = dt << ottieni righe dove(:Componente == numPar[i] & :Batch == cyc[k] & :Tabella sorgente == dt_name | :Batch == bat[k] & :Componente == numPar[i] & :Tabella sorgente == dt_name);
if(N items(check) > 0, // Crea un controllo per vedere se il parametro esiste per il batch corrente
// Crea grafico di base
gb = Costruttore grafico(
//invisibile,
Dimensioni (700, 400),
Variabili (X( :Punto temporale Mesi), Y( :Risultato), Sovrapposizione( :Batch ) ),
Elementi (Punti (X, Y), )
);
gb << Filtro dati locali(invisibile, Aggiungi filtro( colonne( :Componente, :Batch, :Tabella sorgente ), Dove( :Componente == numPar[i] ), Dove( :Batch == {cyc[k], bat[k]}), Dove( :Tabella sorgente == dt_name) ));
dt << Cancella Seleziona();
// Rimuovi la visualizzazione del filtro dal grafico
gb << Mostra pannello di controllo( 0 );
// Segnalazione di modifica della trama
gbb = Report( gb )[GraphBuilderBox( 1 )];
// Aggiungere regressione lineare
gbb << Aggiungi elemento( 1, 1, {Tipo( "Linea di adattamento" ), X, Y, Fiducia di adattamento( 0 ),Equazione( 0 )} );
// Imposta l'asse Y
minval = min(:Result[dt << ottieni righe dove(:Componente == numPar[i] & :Batch == cyc[k] & :Tabella sorgente == dt_name | :Batch == bat[k] & :Componente == numPar[i] & :Tabella sorgente == dt_name)])*0.95;
maxval = max(:Result[dt << ottieni righe dove(:Componente == numPar[i] & :Batch == cyc[k] & :Tabella sorgente == dt_name| :Batch == bat[k] & :Componente == numPar[i] & :Tabella sorgente == dt_name)])*1.05;
maxvalts = max(:Punto temporale Mesi[dt << ottieni righe dove(:Componente == numPar[i] & :Batch == cyc[k] & :Tabella sorgente == dt_name| :Batch == bat[k] & :Componente == numPar[i] & :Tabella sorgente == dt_name)])*1.05;
gbb[AxisBox(1)] << min(-0.1);
gbb[AxisBox(1)] << max(valori massimi);
gbb[AxisBox(2)] << min(valore minimo);
gbb[AxisBox(2)] << max(valore massimo);
gbb[AxisBox(2)] << inc((valore massimo-valore minimo)/10);
// Imposta l'etichetta dell'asse Y
unitList = Array associativo( :Unità risultato[dt << ottieni righe dove(:Componente == numPar[i] & :Batch == cyc[k] & :Tabella sorgente == dt_name | :Batch == bat[k] & :Componente == numPar[i] & :Tabella sorgente == dt_name)] ) << Rimuovi( "" ) << Ottieni chiavi;
Se( N Elementi( unitList ) == 1,
gbb[Casella di modifica testo( 4 )] << Imposta testo( numPar[i] || " [" || unitList[1] || "]" )
);
Se( N Elementi( unitList ) != 1,
gbb[Casella di modifica testo( 4 )] << Imposta testo( numPar[i] )
);
// Imposta il titolo del grafico
gbb[Casella di modifica del testo( 1 )] << Imposta testo( numPar[i] || " vs. Punto temporale ");
// Aggiungi
//gbba = Rapporto(gbb);
col2 << Aggiungi( gbb );
//filtro << chiudi;
gb << chiudi finestra;
// Inizia il secondo grafico
gb2 = Costruttore grafico(
//invisibile,
Dimensioni (700, 400),
Variabili (X(Punto temporale Mesi), Y( :Differenza ), Colore( :Batch ) ),
Elementi (Punti (X, Y))
);
gb2 << Filtro dati locali(invisibile, Aggiungi filtro( colonne( :Componente, :Batch, :Tabella sorgente ), Dove( :Componente == numPar[i] ), Dove( :Batch == cyc[k]), Dove( :Tabella sorgente == dt5_name)));
dt4 << Cancella Seleziona();
// Rimuovi la visualizzazione del filtro dal grafico
gb2 << Mostra pannello di controllo( 0 );
// Segnalazione di modifica della trama
gbb2 = Report( gb2 )[GraphBuilderBox( 1 )];
gbb2 << Aggiungi elemento( 1, 1, {Tipo( "Linea" ), X, Y} );
// Ottieni il valore HC
l_idx = dt4 << Ottieni righe where(dt4:Component == numPar[i] & :Batch == cyc[k]);
ul = min(dt4:HC[l_idx]);
se(manca(ul),
if(min(:Differenza[dt << ottieni righe where(:Componente == numPar[i] & :Batch == cyc[k] & :Tabella sorgente == dt5_name)]) == 0,
valore minimo = -5;
valore massimo = 5,
minval = min(:Differenza[dt << ottieni righe dove(:Componente == numPar[i] & :Batch == cyc[k] & :Tabella sorgente == dt5_name)])*0.95;
maxval = max(:Differenza[dt << ottieni righe dove(:Componente == numPar[i] & :Batch == cyc[k] & :Tabella sorgente == dt5_name)])*1.05;
),
minval = min(:Differenza[dt << ottieni righe dove(:Componente == numPar[i] & :Batch == cyc[k] & :Tabella sorgente == dt5_name)],-ul)*1.05;
maxval = max(:Differenza[dt << ottieni righe dove(:Componente == numPar[i] & :Batch == cyc[k] & :Tabella sorgente == dt5_name)], ul)*1.05;
);
if(!ismissing(ul), //se non c'è valore HC non creare la linea limite
gbb2[AxisBox(2)] << Aggiungi linea di riferimento(ul,"solido", nero, char(rotondo(ul,2)));
gbb2[AxisBox(2)] << Aggiungi linea di riferimento(-ul,"solid", black, char(round(-ul,2)));
);
gbb2[AxisBox(2)] << Aggiungi linea di riferimento(0,"Tratteggiata");
gbb2[AxisBox(2)] << min(valore minimo);
gbb2[AxisBox(2)] << max(valore massimo);
gbb2[AxisBox(2)] << inc((valore massimo-valore minimo)/10);
//Aggiungere
//gbba2 = Segnala( gbb2 );
col3 << Aggiungi( gbba2 );
//filtro << chiudi;
gb2 << chiudi finestra;
);
);
//);
tab = Casella pagina scheda(numPar[i],
V Casella di elenco(
col1
H List Box( col2, col3 ) // Posizionamento dei due grafici uno accanto all'altro
)
);
tab << Titolo(numPar[i]);
//gb << titolo(Carattere(1));
gb_collector << Aggiungi(tab);
);
gb_collector << Ancorabile( 1 );
gb_collector << Imposta Overflow abilitato( 1 );
nw = Nuova finestra("La mia dashboard",
gb_collezionista
);
Ecco il mio copione.
In allegato uno screenshot della mia dashboard attuale, che contiene 8 grafici. Ecco i miei requisiti specifici per organizzare questi grafici:
- Mantieni il primo grafico : vorrei mantenere il primo grafico così com'è.
- Rimuovi il secondo grafico : il secondo grafico dovrebbe essere rimosso dalla dashboard.
- Accoppia gli ultimi sei grafici : gli ultimi sei grafici devono essere accoppiati in modo che ogni coppia venga visualizzata affiancata. In particolare, i grafici devono essere organizzati come segue:
- Il terzo e il quarto grafico dovrebbero essere visualizzati uno accanto all'altro.
- Il quinto e il sesto grafico devono essere visualizzati uno accanto all'altro.
- Il settimo e l'ottavo grafico dovrebbero essere visualizzati uno accanto all'altro.
Riassumendo, il layout finale dovrebbe avere il primo grafico seguito da tre coppie di grafici, con ogni coppia visualizzata affiancata.
Re: grafici interattiviQuesti due script sono totalmente diversi (per favore usa anche la formattazione JSL per il codice JSL, è molto più facile da leggere). Per cosa stai usando Col Box? Su cosa stai eseguendo un loop (i e j)? Cosa determina quali informazioni contiene ciascuno dei grafici? Dovrebbero essere interattivi tra loro?