Grafici sovrapposti<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />CIAO,
Ho riscontrato un problema quando si tratta di impilare le colonne. I dati che guardo possono entrare in centinaia di colonne di dati. Spesso metto insieme le colonne in modo da poter utilizzare un grafico di distribuzione su quella colonna. Ma a volte la mia tabella di dati entra in milioni di righe di dati e inizia a bloccarsi quando impilano le colonne. Mi chiedevo se esiste un modo per sovrapporre una serie di grafici di distribuzione per creare un grafico senza dover impilare tutte le colonne insieme? l ti piace tracciare un grafico di tantissime colonne e sovrapporre tutti quei grafici in uno solo?
Grazie per tutto l'aiuto!
Ri: Grafici sovrappostiEntro i limiti hardware della tua macchina, generalmente JMP è bravo in questo genere di cose. Presumo che (per qualche motivo) non sia possibile importare i dati in una singola colonna.
Puoi sperimentare con il codice qui sotto. Sulla mia macchina, ci vogliono otto secondi, ma più della metà di quel tempo viene spesa per costruire la tabella da cui partire e per valutare le formule in essa contenute. L'impostazione nr = 1.000.0000 fornisce un tempo di esecuzione di circa un minuto.
NamesDefaultToHere(1);
// Number of columns and rows
nc = 130;
nr = 100000;
// Make a test table, dt1, to work with
dt1 = NewTable("Test", NewColumn("Column 1", Numeric, Continuous, Formula(RandomNormal())),AddRows(nr));
For(i=2, i<=nc, i++, dt1 << NewColumn("Column "||Char(i), Numeric, Continuous, Formula(RandomNormal())));
// Get the data from the table into a matrix
m = dt1 << getAsMatrix;
// Close dt1 to recover some memory
Close(dt1, NoSave);
// Reshape into a column vector
m = Shape(m, NRow(m)*NCol(m), 1);
// Make a new table
dt2 = NewTable("Test in a Single Column", NewColumn("All", Numeric, Continuous, Values(m)));
// Recover memory
m = [];
Ri: Grafici sovrappostiGrazie per tutti i vostri suggerimenti!
Sfortunatamente, non è proprio quello che sto cercando. Sembra che JMP non riesca a fare quello che voglio. Perché non voglio dover impilare tutte le colonne insieme, ma voglio il grafico di distribuzione di tutti i dati.
DropAllOtherColumns è una funzione utile che non conoscevo. Dovrò giocarci un po' per vedere se impilare le mie colonne e aggiungere quelle funzioni migliora l'efficienza.
Inoltre, Peter, non mi interessa vedere quale valore corrisponde a quale livello nella distribuzione, motivo per cui voglio qualcosa di equivalente allo stacking, ma senza l'aspetto di risucchio della memoria. Ma quel grafico di distribuzione assomiglia molto a quello che cerco, sfortunatamente non ho la versione 12 di JMP. Ho anche 130 variabili. ahah
Grazie!
Ri: Grafici sovrappostiNon penso che questo tipo di sovrapposizione sia possibile nella piattaforma di distribuzione. Nella mia esperienza lo stacking è abbastanza veloce. Il codice di esempio seguente viene eseguito in pochi secondi sul mio laptop. Se si aumenta il numero di dati a 10 ^ 8 si rallenta, ma è la piattaforma di distribuzione il collo di bottiglia qui, non lo stacking.
Su un'altra nota; un istogramma di milioni di dati non sembra molto diverso da un sottoinsieme casuale più piccolo di dati. Quindi, se le prestazioni sono un problema, potresti provare a ridimensionare il set di dati prima della visualizzazione (o potresti semplicemente aver bisogno di più RAM).
dt = New Table("big");
nr = 100000;
nc = 100;
dt << add rows(nr);
For(i = 1, i <= nc, i++,
dt << New Column("col" || Char(i), set each value(Random Normal()))
);
dt_stacked = dt << Stack(
columns(dt << get column names),
Source Label Column("Label"),
Stacked Data Column("Data"),
Drop All Other Columns(1)
);
dt_stacked << Distribution(Continuous Distribution(Column(:Data), Outlier Box Plot(0)));
Ri: Grafici sovrappostiLa regola pratica che ho sentito riguardo a JMP è quella di avere a disposizione il doppio della memoria disponibile rispetto alla dimensione del set di dati.Quindi forse è necessaria più memoria?
Ri: Grafici sovrappostiQuesto dovrebbe impilare i tuoi dati senza duplicarli troppo.Elimina la colonna dell'etichetta poiché non ti interessa da quale colonna originale provengono i valori.Elimina tutte le altre colonne potrebbe essere la parte che stai cercando.
newdt = Data Table( "Big Class" ) << Stack(
columns( :height, :weight, :age ),
Source Label Column( "Label" ),
Stacked Data Column( "Data" ),
Drop All Other Columns( 1 ),
Output Table( "hw" )
);
newdt << deletecolumns( "label" );
newdt << Distribution( Continuous Distribution( Column( :Data ) ) );

Ri: Grafici sovrappostisophiaw: Nella versione 12 di JMP è possibile creare la visualizzazione seguente (BigClass) Altezza per sesso (overlay).

Penso che questa sia la visualizzazione che cerchi? Ma sfortunatamente devi impilare la variabile Overlay e dici che è problematico dal punto di vista della gestione della tabella dati. Quanta RAM possiedi? Forse aggiungere più RAM può aiutare con l'arresto anomalo? A parte questo, con tutti i livelli della variabile di sovrapposizione suggeriti, mi chiedo solo quanto sarà visivamente accattivante il tuo grafico? Per non parlare di essere in grado di dire davvero quale livello è quale. La visualizzazione in sovrapposizione dell'istogramma è davvero più efficace con un numero relativamente piccolo di livelli per la variabile di sovrapposizione.
Ri: Grafici sovrappostiQuesto è utile, ma non è proprio quello che sto cercando. Voglio che assomigli essenzialmente al grafico di distribuzione (dove selezioni una colonna e la rappresenti graficamente), tranne per il fatto che voglio essere in grado di selezionare più colonne e creare una distribuzione. Voglio solo un grafico con i valori nella parte inferiore e la quantità di dati sull'asse y. In questo momento devo impilare insieme tutte le colonne che voglio rappresentare graficamente e quindi rappresentare graficamente quella nuova colonna (che è esattamente ciò che voglio). L'unico problema è che ho circa 130 colonne che voglio rappresentare graficamente insieme e impilarle è irragionevole, soprattutto quando la mia tabella dati è solitamente composta da centinaia di migliaia di righe e impilare due colonne insieme duplica la quantità di righe; impilarne 130 causerebbe l'arresto anomalo di JMP o richiederebbe un'enorme quantità di tempo. Il generatore di grafici essenzialmente non mi dice nulla perché in questo caso non esiste l'asse x, quindi non so quanto rappresenti ciascuna barra o altro.
Esiste un modo per sovrapporre i grafici di distribuzione per creare un grafico di tutte le colonne invece di separare ogni colonna?
Grazie!
Ri: Grafici sovrappostiVerifica se il Costruttore di grafici farà quello che desideri.Seleziona tutte le colonne e rilasciale sull'asse Y.Vedrai una nuvola di punti.Ecco Big Class utilizzando età, altezza, peso:

quindi fare clic con il pulsante destro del mouse->aggiungi->istogramma:

quindi fare clic con il pulsante destro del mouse->punti->rimuovi, fare clic su FINE

fai clic sui titoli e premi Elimina (o aggiungi un titolo migliore)

quindi puoi usare il triangolo rosso per copiare lo script:
Graph Builder(
Size( 534, 418 ),
Show Control Panel( 0 ),
Variables( Y( :age ), Y( :height, Position( 1 ) ), Y( :weight, Position( 1 ) ) ),
Elements( Histogram( Y( 1 ), Y( 2 ), Y( 3 ), Legend( 3 ) ) ),
SendToReport(
Dispatch( {}, "graph title", TextEditBox, {Set Text( "Students" )} ),
Dispatch( {}, "X title", TextEditBox, {Set Wrap( 2 )} ),
Dispatch( {}, "Y title", TextEditBox, {Set Text( "" )} ),
Dispatch(
{},
"Graph Builder",
FrameBox,
{DispatchSeg(
Hist Seg( "Histogram (age)" ),
Histogram Color( -4222943 )
), DispatchSeg(
Hist Seg( "Histogram (height)" ),
Histogram Color( -13977687 )
), DispatchSeg(
Hist Seg( "Histogram (weight)" ),
Histogram Color( -3780931 )
)}
)
)
)