<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />salut à tous,
Quelqu'un at-il de l'expérience dans la production de graphiques à bulles avec des espaces temporels inégaux?
dans les graphiques à bulles, la dimension temporelle est plutôt limitée. Ce n’est pas une dimension temps réel, mais une animation ligne par ligne. Par conséquent, lorsque vous essayez d'animer des événements de données de journal réels avec des différences de temps inégales, l'animation manque de respect pour l'heure.
Le fichier joint contient un journal des événements - chaque ligne est un événement - dans lequel un individu (ID) est localisé dans un espace X, Y. à chaque rangée, il y a une heure de lecture de l'événement. le script de tracé à bulles dans le fichier anime ligne par ligne sans tenir compte des différentes durées de chacune.
Le script suivant gonfle la table de données afin que chaque ligne ne dure qu'une minute et produise une représentation plus honnête de l'espace dans le temps.
J'accepterais n'importe quels commentaires sur le sujet.
// ouvre d'abord la table attachée "Bubble Plot2"
// lance ensuite le script.
dt = Tableau de données actuel () ;
// la table originale est généralement triée par heure d'enregistrement.
// Trier par ID pour permettre le calcul de la durée par événement pour chaque ID.
dt << Trier ( par ( ID ) , Ascendant , remplacer la table ( 1 ) ) ;
// Ajoute une colonne pour calculer la durée de chaque événement.
dt << Nouvelle colonne ( "Durée de l'événement" ,
Numérique ,
Continu ,
Format ( "Meilleur" , 6 ) ,
Formule (
Si (
ID == Décalage ( ID , - 1 ) , Différence de date ( : temps , Décalage ( : temps , - 1 ) , "minute" , "réel" ) ,
// ceci était supposé calculer une durée hypothétique jusqu'au dernier événement de l'ensemble de données mais ne fonctionnait pas.
Différence de date ( : temps , Col Max ( temps ) ) , "minute" ,
"réel"
)
) ,
) ;
dt << exécuter des formules ;
Colonne ( dt , "Durée de l'événement" ) << supprimer la formule ;
// Enregistre la longueur d'origine de la table avant d'ajouter des lignes.
// L'utilisation de Nrow () directement dans la boucle For produira une boucle infinie.
rangéeN = N Row () ;
// Pour chaque ligne d'origine, générez de nouvelles lignes autant que la durée de chaque événement.
Pour ( je = 1 , je <= rangéeN , je ++,
Rowi = dt << se disputer ( je ) ;
Pour ( z = 1 , z <= ( : prénom ( "Durée de l'événement" ) [ je ] - 1 ) , z ++,
z ;
dt << ajouter une rangée ( Rowi ) ;
dt << exécuter des formules ;
) ;
) ;
// trie à nouveau le tableau de données afin de simplifier la formule suivante.
dt << Trier ( par ( ID , temps ) , Ascendant , remplacer la table ( 1 ) ) ;
// Ajoute une nouvelle colonne avec l'heure réelle pour chaque ligne.
Nouvelle colonne ( "Temps réél" ,
Numérique ,
Continu ,
Format ( "aaaa-mm-jjThh: mm" , 16 ) ,
Format d'entrée ( "aaaa-mm-jjThh: mm" ) ,
Formule (
Si (
Rangée () == 1 , : temps ,
: ID > Décalage ( : ID , 1 ) , : temps ,
// ceci ajoutera une minute à l'indication de l'heure précédente.
Décalage ( : Temps réél , 1 ) + 60
)
) ,
) ;
// Définit le marqueur de la couleur par ID
Tableau de données actuel () << Couleur par colonne (
ID ,
Couleur ( 1 ) ,
Thème de couleur ( "JMP Default" ) ,
Marqueur ( 0 ) ,
Thème de marqueur ( "" ) ,
Échelle continue ( 0 ) ,
Échelle Inversée ( 0 ) ,
Lignes exclues ( 0 )
) ;;
// produit le graphique à bulles avec indication de l'heure réelle.
Parcelle à bulles (
X ( : X ) ,
Y ( : y ) ,
Temps ( : Temps réél ) ,
ID ( : ID ) ,
Titre Position ( 1.61111111111111 , 2,7 ) ,
SendToReport (
Envoi (
{} ,
"Diagramme à bulles de y par x sur plusieurs identifiants en temps réel" ,
OutlineBox ,
{ Définir le titre ( "Diagramme à bulles de y par x tout au long de l'ID en temps réel - Intervalles de temps corrects !!!" )}
) ,
Envoi ( {} , "1" , ScaleBox , { Min ( 0.5 ) , Max ( 3,5 ) , Inc ( 0.5 ) , Tiques mineures ( 1 ) , Étiquettes tournées ( "Horizontal" )} ) ,
Envoi ( {} , "2" , ScaleBox , { Min ( 0.5 ) , Max ( 3,5 ) , Inc ( 0.5 ) , Tiques mineures ( 1 ) , Étiquettes tournées ( "Horizontal" )} )
)
) ;
merci Dan,
les problèmes sont corrects. Je me demandais en fait s’il serait possible d’ajouter une option «Durée» à la plate-forme, car les autres plates-formes ont une option de poids ou de fréquence.
la chose est que les données peuvent avoir toutes sortes de structures. Par exemple, une colonne pour l'heure de début et une autre pour l'heure de fin de chaque événement. ou alternativement, heure de début et durée. de plus, dans de nombreux cas, il est difficile de définir la durée du dernier événement.
dans mon cas, l'animation entre les événements n'est pas si importante. ce qui est plus crucial est la position relative correcte des événements à chaque instant, comme dans une partie d'échecs. le problème survient lorsque les données ne sont pas collectées à intervalles fixes dans chaque observation mais que seules les modifications sont enregistrées (journal des événements),
Ron
Salut Ron
Merci pour l'exemple - il existe plusieurs autres modèles d'événement intéressants à prendre en compte pour Bubble Plot. Je pense qu'il peut y avoir deux problèmes ici:
1) Bubble Plot n'a pas le concept de durée d'événement. Chaque observation est instantanée et les groupes d’ID sont supposés se déplacer linéairement entre les observations. Je remarque que lorsque vous développez la table, vous maintenez la position constante. Je suppose donc que l'interpolation n'est pas souhaitée dans votre cas.
2) Le problème majeur peut être que le temps lui-même est animé linéairement entre chaque observation, mais pas globalement. Cela est utile dans les cas où des observations peuvent apparaître dans des grappes avec des écarts importants, mais elles peuvent sembler déformées lorsque vous vous attendez à ce que l'animation suive le temps à une vitesse constante.
Si ces questions vous semblent correctes, je les ajouterai à titre de suggestions pour les travaux futurs de Bubble Plot.
Meilleures salutations,
-Dan