Graphiques superposés<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Salut,
J'ai rencontré un problème lorsqu'il s'agit d'empiler des colonnes. Les données que je consulte peuvent se répartir dans des centaines de colonnes de données. Souvent, j'empile les colonnes afin de pouvoir utiliser un graphique de distribution sur cette colonne. Mais parfois, ma table de données atteint des millions de lignes de données et elle commence à planter lorsque j'empile des colonnes. Je me demandais s'il existait un moyen de superposer plusieurs graphiques de distribution pour créer un seul graphique sans avoir à empiler toutes les colonnes ensemble ? L Comme représenter graphiquement une tonne de colonnes et superposer tous ces graphiques en un seul ?
Merci pour toute aide !
Re : Graphiques superposésCompte tenu des contraintes matérielles de votre machine, JMP est généralement bon dans ce genre de choses. Je suppose que (pour une raison quelconque), il n'est pas possible d'importer les données dans une seule colonne.
Vous pouvez expérimenter avec le code ci-dessous. Sur ma machine, cela prend huit secondes, mais plus de la moitié de ce temps est consacrée à la création de la table de départ et à l'évaluation des formules qu'elle contient. Le réglage nr = 1 000 0000 donne une durée d'exécution d'environ une minute.
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 = [];
Re : Graphiques superposésMerci pour toutes vos suggestions!
Malheureusement, ce n'est pas vraiment ce que je recherche. Il semble que JMP ne puisse tout simplement pas faire ce que je veux. Parce que je ne veux pas avoir à empiler toutes les colonnes ensemble, mais je veux le graphique de distribution de toutes les données.
DropAllOtherColumns est une fonction utile que je ne connaissais pas. Je vais devoir jouer avec cela pour voir si l'empilement de mes colonnes et l'ajout de ces fonctions améliorent l'efficacité.
De plus, Peter, je ne me soucie pas de voir quelle valeur correspond à quel niveau dans la distribution, c'est pourquoi je veux quelque chose d'équivalent à l'empilement, mais sans l'aspect de succion de mémoire. Mais ce graphique de distribution ressemble beaucoup à ce que je recherche, malheureusement je n'ai pas la version 12 de JMP. J'ai aussi 130 variables. haha
Merci!
Re : Graphiques superposésJe ne pense pas que ce genre de superposition soit possible dans la plateforme de distribution. D'après mon expérience, l'empilement est assez rapide. L'exemple de code ci-dessous s'exécute en quelques secondes sur mon ordinateur portable. Si vous augmentez le nombre de données à 10 ^ 8, cela ralentit, mais c'est la plate-forme de distribution qui constitue ici le goulot d'étranglement, pas l'empilement.
D'un autre côté; un histogramme de millions de données ne semble pas très différent d'un sous-ensemble aléatoire plus petit de données. Ainsi, si les performances posent problème, vous pouvez essayer de réduire la taille de l'ensemble de données avant la visualisation (ou vous aurez peut-être simplement besoin de plus de 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)));
Re : Graphiques superposésLa règle générale que j'ai entendue à propos de JMP est d'avoir deux fois plus de mémoire disponible que la taille de votre ensemble de données.Alors peut-être que plus de mémoire est nécessaire ?
Re : Graphiques superposésCela devrait empiler vos données sans trop les dupliquer.Il supprime la colonne d'étiquette puisque vous ne vous souciez pas de la colonne d'origine d'où proviennent les valeurs.Supprimer toutes les autres colonnes c'est peut-être la pièce que vous recherchez.
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 ) ) );

Re : Graphiques superposéssophiaw : Dans JMP version 12, vous pouvez créer la visualisation ci-dessous (BigClass) Hauteur par sexe (superposition).

Je pense que c'est la visualisation que vous recherchez ? Mais malheureusement, vous devez empiler la variable Overlay et vous dites que cela pose problème du point de vue de la gestion des tables de données. De quelle quantité de RAM disposez-vous ? Peut-être que l'ajout de plus de RAM peut aider à éviter les plantages ? Tout cela mis à part, avec autant de niveaux de variable de superposition que vous le suggérez, je me demande simplement à quel point votre graphique sera visuellement attrayant ? Et encore moins être capable de vraiment dire quel niveau correspond à quel niveau. La visualisation par superposition d'histogramme est vraiment la plus efficace avec seulement un nombre relativement petit de niveaux pour la variable de superposition.
Re : Graphiques superposésC'est utile, mais ce n'est pas tout à fait ce que je recherche. Je veux qu'il ressemble essentiellement au graphique de distribution (où vous sélectionnez une colonne et la représentez graphiquement), sauf que je veux pouvoir sélectionner plusieurs colonnes et créer une distribution. Je veux juste un graphique avec les valeurs en bas et la quantité de données sur l'axe y. À l'heure actuelle, je dois empiler toutes les colonnes que je souhaite représenter graphiquement, puis représenter graphiquement cette nouvelle colonne (ce qui est exactement ce que je veux). Le seul problème est que j'ai environ 130 colonnes que je veux représenter graphiquement ensemble et les empiler n'est pas raisonnable, surtout lorsque ma table de données contient généralement des centaines de milliers de lignes et que l'empilement de deux colonnes ensemble duplique le nombre de lignes ; en empiler 130 ferait planter JMP ou prendrait énormément de temps. Le générateur de graphiques ne me dit essentiellement rien car il n'y a pas d'axe x dans ce cas, donc je ne sais pas combien représente chaque barre ou quoi que ce soit.
Existe-t-il un moyen de superposer les graphiques de distribution pour créer un graphique de toutes les colonnes au lieu de séparer chaque colonne ?
Merci!
Re : Graphiques superposésVoyez si Graph Builder fera ce que vous voulez.Sélectionnez toutes les colonnes et déposez-les sur l'axe Y.Vous verrez un nuage de points.Voici Big Class en utilisant l'âge, la taille et le poids :

puis faites un clic droit->ajouter->histogramme :

puis faites un clic droit->points->supprimer, cliquez sur TERMINÉ

cliquez sur les titres et appuyez sur Supprimer (ou ajoutez un meilleur titre)

alors vous pouvez utiliser le triangle rouge pour copier le 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 )
)}
)
)
)