<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ciao a tutti,
qualcuno ha esperienza nella produzione di grafici a bolle con spazi temporali irregolari?
nei grafici a bolle la dimensione temporale è piuttosto limitata. Non è una dimensione in tempo reale, ma è animata da riga per riga. Pertanto, quando si tenta di animare eventi di dati di registro reali con differenze temporali non uniformi, l'animazione non rispetta l'ora.
nel file allegato c'è un log degli eventi - ogni riga è un evento - in cui un individuo (ID) si trova in uno spazio X, Y. ad ogni riga c'è una lettura del tempo dell'evento. lo script del grafico a bolle nel file si anima riga per riga senza adattarsi adeguatamente alle diverse durate di ciascuno.
Lo script seguente gonfia la tabella dati in modo che ogni riga sia di un minuto e produca una rappresentazione più onesta dello spazio nel tempo.
vorrei apriciare qualsiasi commento in merito.
// prima apri la tabella allegata "Bubble Plot2"
// quindi esegui lo scrtpt.
dt = Tabella dei dati corrente () ;
// la tabella originale viene solitamente ordinata per orario di registrazione.
// Ordina per ID per consentire il calcolo della durata per evento per ciascun ID.
dt << ordinare ( di ( ID ) , Ascendente , sostituire la tabella ( 1 ) ) ;
// Aggiungi una colonna per calcolare la durata di ciascun evento.
dt << Nuova colonna ( "Durata evento" ,
Numerico ,
Continuo ,
Formato ( "Migliore" , 6 ) ,
Formula (
Se (
ID == Ritardo ( ID , - 1 ) , Differenza di data ( : tempo , Ritardo ( : tempo , - 1 ) , "Minuto" , "effettivo" ) ,
// questo doveva calcolare una durata ipotetica fino all'ultimo evento nel set di dati ma non funziona.
Differenza di data ( : tempo , Col Max ( tempo ) ) , "Minuto" ,
"effettivo"
)
) ,
) ;
dt << eseguire le formule ;
Colonna ( dt , "Durata evento" ) << elimina la formula ;
// Registra la lunghezza originale della tabella prima di aggiungere righe.
// L'uso di Nrow () direttamente nel ciclo For produce un ciclo infinito.
rown = N Row () ;
// Per ogni riga originale, produce nuove righe tante quante la durata di ciascun evento.
Per ( io = 1 , io <= rown , io ++,
Rowi = dt << mettersi in fila ( io ) ;
Per ( z = 1 , z <= ( : Nome ( "Durata evento" ) [ io ] - 1 ) , z ++,
z ;
dt << Aggiungi riga ( Rowi ) ;
dt << eseguire le formule ;
) ;
) ;
// ordina nuovamente la tabella dati per semplificare la formula successiva.
dt << ordinare ( di ( ID , tempo ) , Ascendente , sostituire la tabella ( 1 ) ) ;
// Aggiungi una nuova colonna con il tempo effettivo per ogni riga.
Nuova colonna ( "Tempo reale" ,
Numerico ,
Continuo ,
Formato ( "Aaaa-mm-ggThh: mm" , 16 ) ,
Formato di input ( "Aaaa-mm-ggThh: mm" ) ,
Formula (
Se (
Riga () == 1 , : tempo ,
: ID > Ritardo ( : ID , 1 ) , : tempo ,
// questo aggiungerà un minuto all'indicazione dell'ora precedente.
Ritardo ( : Tempo reale , 1 ) + 60
)
) ,
) ;
// Imposta il colore dell'indicatore per ID
Tabella dei dati corrente () << Colore per colonna (
ID ,
Colore ( 1 ) ,
Tema del colore ( "JMP predefinito" ) ,
marcatore ( 0 ) ,
Tema degli indicatori ( "" ) ,
Scala continua ( 0 ) ,
Scala inversa ( 0 ) ,
Righe escluse ( 0 )
) ;;
// produce il grafico a bolle con l'indicazione dell'ora effettiva.
Bubble Plot (
X ( : X ) ,
Y ( : y ) ,
Tempo ( : Tempo reale ) ,
ID ( : ID ) ,
Posizione del titolo ( 1,61111111111111 , 2.7 ) ,
SendToReport (
Spedizione (
{} ,
"Grafico a bolle di y di x Across ID ID in tempo reale" ,
OutlineBox ,
{ Imposta titolo ( "Bubble Plot di y di x Across ID ID in tempo reale - Intervalli di tempo corretti !!!" )}
) ,
Spedizione ( {} , "1" , scalebox , { min ( 0.5 ) , Max ( 3.5 ) , Inc ( 0.5 ) , Zecche minori ( 1 ) , Etichette ruotate ( "Orizzontale" )} ) ,
Spedizione ( {} , "2" , scalebox , { min ( 0.5 ) , Max ( 3.5 ) , Inc ( 0.5 ) , Zecche minori ( 1 ) , Etichette ruotate ( "Orizzontale" )} )
)
) ;
grazie Dan,
i problemi sono corretti. In realtà mi stavo chiedendo se sarebbe stato possibile aggiungere un'opzione "Durata" nella piattaforma poiché le altre piattaforme hanno un'opzione di peso o di frequenza.
il fatto è che i dati possono avere tutti i tipi di strutture. ad esempio, una colonna per il tempo di inizio e un'altra per l'ora di fine di ogni evento. o in alternativa, ora di inizio e durata. inoltre, in molti casi c'è un problema nel definire la durata dell'ultimo evento.
nel mio caso l'animazione tra gli eventi non è così importante. ciò che è più cruciale è la corretta posizione relativa degli eventi in ogni momento, come in una partita a scacchi. il problema sorge quando i dati non vengono raccolti ad intervalli fissi da ciascuna osservazione ma vengono registrate solo le modifiche (registro eventi),
ron
Ciao Ron,
Grazie per l'esempio: ci sono molti altri modelli di eventi che sono interessanti da considerare per Bubble Plot. Penso che potrebbero esserci due problemi qui:
1) Bubble Plot non ha il concetto di durata dell'evento. Ogni osservazione è istantanea e si presume che i gruppi di ID si muovano in modo lineare tra le osservazioni. Ho notato che quando espandi il tavolo mantieni costante la posizione, quindi presumo che l'interpolazione non sia desiderata nel tuo caso.
2) Il problema più grande potrebbe essere che il tempo stesso è animato linearmente tra ogni osservazione, ma non in modo lineare in generale. Ciò aiuta nei casi in cui possono apparire osservazioni in cluster con ampi spazi intermedi, ma può apparire distorto quando ci si aspetta che l'animazione segua il tempo a un ritmo costante.
Se questi problemi sembrano corretti, li aggiungerò come suggerimenti per il futuro lavoro di Bubble Plot.
I migliori saluti,
-Dan