Tracer un diagramme 3DBonjour,
J'essaie de tracer un diagramme 3D mais sans succès. J'ai les données dans Excel comme ceci :
| | Oui | 4,15815757 | 10,5410784 |
| X | | Z1 | Z2 |
| 0,00038225 | | 0,04740562 | 0,09242527 |
| 0,00032384 | | 0,13448339 | 0,34250103 |
Mais j'ai beaucoup de lignes et de colonnes. C'est juste un exemple. J'apprécierais toute aide.
Merci.
Re : Tracer un diagramme 3D'Daten.xlsx' a 23 valeurs Y, 444 valeurs X et une valeur Z pour chacune (10 212 valeurs en tout). Alors 'dtFinal' ne devrait-il pas être :
dtFinal = New Table( "Converted", New Column( "X" ), New Column( "Y" ), New Column( "Z" ) );
dtFinal << add rows( N Rows( Xmat ) * N Rows( Ymat ) );
rowcnt = 0;
For( Xcnt = 1, Xcnt <= N Rows( Xmat ), Xcnt++,
For( Ycnt = 1, Ycnt <= N Rows( Ymat ), Ycnt++,
rowcnt++;
dtFinal:X[rowcnt] = Xmat[Xcnt];
dtFinal:Y[rowcnt] = Ymat[Ycnt];
dtFinal:Z[rowcnt] = Zmat[Xcnt, Ycnt];
)
);
donner quelque chose comme ?

Sans rien savoir du contexte des données et de ce que vous essayez, j'imagine que des visualisations plus informatives sont possibles.
Re : Tracer un diagramme 3DLe code fonctionne plutôt bien. J'ai découvert que je n'avais pas assez de mémoire disponible pour exécuter toutes les lignes 104 284 944 , c'est pourquoi il n'a pas fonctionné.
J'utilise JMP 12.
Merci beaucoup.
Re : Tracer un diagramme 3DJ'ai téléchargé votre fichier Excel et je l'ai enregistré.J'ai ensuite pointé le script JSL vers le nouveau fichier.J'ai aussi dû changer la ligne dans le code
Worksheets( "example" ),
à
Worksheets( "JMP" ),
parce que vous avez modifié le nom de la feuille de calcul dans le classeur.
Je n'ai pas exécuté le programme sur les 104 284 944 lignes complètes que le JSL produirait s'il était exécuté jusqu'à la fin, mais je l'ai exécuté sur un nombre inférieur pour me prouver que le code fonctionnerait.
Si le changement ci-dessus n'est pas le problème, la prochaine question que je me poserais est la suivante : quelle version de JMP utilisez-vous ?
Re : Tracer un diagramme 3DMerci beaucoup pour votre aide, je l'ai vraiment appréciée.
Cependant, lorsque j'exécute le script, une erreur s'affiche dans la ligne 70 indiquant que la valeur dans la colonne X ne peut pas être déterminée, car le nombre de lignes (0) n'est pas valide.
J'ai joint les données Excel sur lesquelles je travaille. Voudriez-vous y jeter un œil ? Je suis un nouvel utilisateur de JSL, c'est pourquoi je n'ai pas beaucoup d'expérience.
Merci.
Re : Tracer un diagramme 3DMa première suggestion est de déplacer Add Rows() plus haut dans la boucle.Add Rows() est une fonction assez lente, donc si vous pouviez ajouter toutes les lignes dont vous avez besoin pour la table de données, juste après la New Table() initiale, cela rendrait le programme beaucoup plus rapide.Cela signifierait également que vous devrez ajouter un compteur de lignes global, pour garder une trace de la ligne sur laquelle vous travaillez, au lieu d'utiliser N Rows().
Names Default To Here( 1 );
// Read in Excel file
dt = Open(
"c:\users\txjim\documents\read in issue\example.xlsx"
/*"<YOUR path="" to="" the="" excel="" file="">\example.xlsx"*/,
Worksheets( "example" ),
Use for all sheets( 1 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 0 ),
,
Number of Rows in Headers( 1 ),
Headers Start on Row( 1 ),
Data Starts on Row( 1 ),
Data Starts on Column( 1 ),
Data Ends on Row( 0 ),
Data Ends on Column( 0 ),
Replicated Spanned Rows( 1 ),
Replicated Spanned Headers( 0 ),
Suppress Hidden Rows( 1 ),
Suppress Hidden Columns( 1 ),
Suppress Empty Columns( 1 ),
Treat as Hierarchy( 0 ),
Multiple Series Stack( 0 ),
Import Cell Colors( 0 ),
Limit Column Detect( 0 ),
Column Separator String( "-" )
)
);
// Get Y Matrix
Ymat = {};
For( i = 3, i <= N Col( dt ), i++,
If( Column( i )[1] != "",
Ymat = Ymat |/ Matrix( Num( Column( i )[1] ) )
)
);
// Get rid of unrequired cells, and get the X and Z matrices
dt << select rows( [1, 2, 3] );
dt << delete rows;
dt << delete column( 2 );
// Convert all columns to numerics
For( i = 1, i <= N Col( dt ), i++,
Column( dt, i ) << data type( numeric )
);
// Get X matrix
Xmat = Column( dt, 1 ) << get as matrix;
dt << delete column( 1 );
// Get Z matrix
Zmat = dt << get as matrix;
// Create new data table, and output the data
dtFinal = New Table( "Converted", New Column( "X" ), New Column( "Y" ), New Column( "Z" ) );
dtFinal << add rows( N Rows( Xmat ) * N Rows( Ymat ) * N Rows( Zmat ) * N Cols( Zmat ) );
rowcnt = 0;
For( Xcnt = 1, Xcnt <= N Rows( Xmat ), Xcnt++,
For( Ycnt = 1, Ycnt <= N Rows( Ymat ), Ycnt++,
For( Zrowcnt = 1, Zrowcnt <= N Rows( Zmat ), Zrowcnt++,
For( Zcolcnt = 1, Zcolcnt <= N Cols( Zmat ), Zcolcnt++,
rowcnt++;
dtFinal:X[rowcnt] = Xmat[Xcnt];
dtFinal:Y[rowcnt] = Ymat[Ycnt];
dtFinal:Z[rowcnt] = Zmat[Zrowcnt, Zcolcnt];
)
)
)
);
dtFinal << Scatterplot 3D(
Y( :X, :Y, :Z ),
Frame3D(
Set Grab Handles( 0 ),
Set Walls( 1 ),
Set Rotation( -54, 0, 38 ),
Set Text Scale( 2 ),
Set Line Scale( 1 ),
Set Marker Transparency( 1 ),
Set Marker Quality( 0.25 ),
Set Marker Scale( 1 ),
Set View Perspective( 0.1 ),
Set View Zoom( 1 )
)
);</YOUR>Re : Tracer un diagramme 3DJ'ai juste une autre question. Existe-t-il un moyen de rendre ce code plus rapide, car j'ai affaire à du Big Data et son exécution prend des heures et parfois ce n'est pas le cas.
Mon ordinateur portable est un Asus, Windowns 7, 64 bits, 4 Go (RAM) et 197 Go de mémoire.
Je ne pense donc pas que le problème vienne de mon ordinateur, n'est-ce pas ?
Merci.
Re : Tracer un diagramme 3DMerci beaucoup. C'est exactement ce que je voulais faire et cela fonctionne parfaitement.
Re : Tracer un diagramme 3DJ'ai créé un exemple de fichier Excel, basé sur votre description et je l'ai joint à cette entrée.J'ai ensuite développé le JSL suivant pour le lire et créer le tracé 3D des données.J'espère que c'est ce que tu veux

Names Default To Here( 1 );
// Read in Excel file
dt = Open(
"<YOUR path="" to="" the="" excel="" file="">\example.xlsx",
Worksheets( "example" ),
Use for all sheets( 1 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 0 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( 1 ),
Data Starts on Row( 1 ),
Data Starts on Column( 1 ),
Data Ends on Row( 0 ),
Data Ends on Column( 0 ),
Replicated Spanned Rows( 1 ),
Replicated Spanned Headers( 0 ),
Suppress Hidden Rows( 1 ),
Suppress Hidden Columns( 1 ),
Suppress Empty Columns( 1 ),
Treat as Hierarchy( 0 ),
Multiple Series Stack( 0 ),
Import Cell Colors( 0 ),
Limit Column Detect( 0 ),
Column Separator String( "-" )
)
);
// Get Y Matrix
Ymat = {};
For( i = 3, i <= N Col( dt ), i++,
If( Column( i )[1] != "",
Ymat = Ymat |/ Matrix( Num( Column( i )[1] ) )
)
);
// Get rid of unrequired cells, and get the X and Z matrices
dt << select rows( [1, 2, 3] );
dt << delete rows;
dt << delete column( 2 );
// Convert all columns to numerics
For( i = 1, i <= N Col( dt ), i++,
Column( dt, i ) << data type( numeric )
);
// Get X matrix
Xmat = Column( dt, 1 ) << get as matrix;
dt << delete column( 1 );
// Get Z matrix
Zmat = dt << get as matrix;
// Create new data table, and output the data
dtFinal = New Table( "Converted", New Column( "X" ), New Column( "Y" ), New Column( "Z" ) );
For( Xcnt = 1, Xcnt <= N Rows( Xmat ), Xcnt++,
For( Ycnt = 1, Ycnt <= N Rows( Ymat ), Ycnt++,
For( Zrowcnt = 1, Zrowcnt <= N Rows( Zmat ), Zrowcnt++,
For( Zcolcnt = 1, Zcolcnt <= N Cols( Zmat ), Zcolcnt++,
dtFinal << Add Rows( 1 );
dtFinal:X[N Rows( dtFinal )] = Xmat[Xcnt];
dtFinal:Y[N Rows( dtFinal )] = Ymat[Ycnt];
dtFinal:Z[N Rows( dtFinal )] = Zmat[Zrowcnt, Zcolcnt];
)
)
)
);
dtFinal << Scatterplot 3D(
Y( :X, :Y, :Z ),
Frame3D(
Set Grab Handles( 0 ),
Set Walls( 1 ),
Set Rotation( -54, 0, 38 ),
Set Text Scale( 2 ),
Set Line Scale( 1 ),
Set Marker Transparency( 1 ),
Set Marker Quality( 0.25 ),
Set Marker Scale( 1 ),
Set View Perspective( 0.1 ),
Set View Zoom( 1 )
)
);</YOUR>
Assurez-vous de modifier le chemin dans le JSL pour qu'il pointe vers l'endroit où vous enregistrez le fichier Excel joint.
Re : Tracer un diagramme 3DMerci d'avoir répondu. Je vais vous montrer à quoi ressemblent mes données dans Excel :
| | Oui | 4,15815757 | 10,5410784 | 14,6453847 | 19 762652 | 29 5884633 | 40,1035851 | 52 7727379 | 64 5664014 | 71 6339866 | 80,1791963 | 92 5639742 | 108 325272 | 114 711013 | 121 815695 | 142,186092 | 160,139901 | 175 938007 | 189 208612 | 200 409857 | 209 675249 | 221,03791 | 241,182479 | 256 870356 |
| X | | Z1 | Z2 | Z3 | Z4 | Z5 | Z6 | Z7 | Z8 | Z9 | Z10 | Z11 | Z12 | Z13 | Z14 | Z15 | Z16 | Z17 | Z18 | Z19 | Z20 | Z21 | Z22 | Z23 |
| 0 | | | | | | | | | | | | | | | | | | | | | | | | |
| -3,8225E-05 | | 0,04740562 | 0,09242527 | 0,23259929 | 1 38211141 | 2,04180178 | 3 06816231 | 0,27673071 | 0,08808252 | 0,85756483 | 0,11511972 | 0,39746555 | 0,22290737 | 0,06869082 | 0,48405979 | 1 49275933 | 0,64964997 | 0,85255862 | 2 7009082 | 0,92420938 | 0,07121721 | 20,393539 | 12 7535737 | 2 59458619 |
| 0,00032384 | | 0,13448339 | 0,34250103 | 0,37990033 | 0,38410363 | 1 70627509 | 0,89349347 | 0,42177943 | 0,20623338 | 1,51917679 | 0,26283727 | 0,68063752 | 0,75284843 | 0,10052593 | 0,3008461 | 0,98138204 | 1 02336837 | 0,31897393 | 1 47302568 | 0,78544606 | 0,1680408 | 0,3350895 | 1 47171341 | 7,46166212 |
Ci-dessous, vous pouvez voir à quoi ressemblent mes données sous le formulaire X, Y, Z, mais j'ai 23 points sur Y et des centaines de lignes.
| oui | y1 | y2 | y3 | y4 |
| x1 | z11 | z21 | z31 | z41 |
| x2 | z12 | z22 | z32 | z42 |
Je voudrais afficher les coordonnées dans un tracé 3D.
C'est là le problème, car pour vous montrer dans un tableau XYZ affiché, je dois développer cette matrice. Par exemple:
| x1 | y1 | z11 |
| x1 | y1 | z12 |
| x1 | y1 | z13 |
| | | |
| x1 | y2 | z21 |
| x1 | y2 | z22 |
| x1 | y2 | z23 |
Et ainsi de suite.. Mais je n'ai aucune idée de comment faire cela dans JMP et le tracer. Je sais qu'il existe un moyen automatique de le faire en utilisant Origin, mais je dois le faire en utilisant JMP. Pourriez-vous comprendre ce que je veux dire ?
Merci.
Re : Tracer un diagramme 3DPlus d'explications sur vos données doivent être apportées.
Vous attendez-vous à ce que toutes les données soient affichées dans un seul tracé, ou chaque colonne Z, Z2, Z2, etc. indique-t-elle qu'un tracé distinct doit être réalisé ?
Étant donné que chaque point affiché dans un tracé 3D est défini par les 3 dimensions, pouvez-vous s'il vous plaît montrer comment vos valeurs dans le tableau affiché seraient affichées si le tableau était sous la forme de
Re : Tracer un diagramme 3DEn règle générale, JMP Platforms s'attend à ce que les valeurs de chaque variable (dans ce cas, « x », « y » et « z ») se trouvent dans leur propre colonne. Donc pour vos données, je pense que ce serait :

Vous pouvez alors essayer, par exemple, « Graphiques > Nuage de points 3D '.
Vous pouvez également utiliser JMP pour réorganiser les données sous cette forme, soit à la main, soit à l'aide d'un script. Mais les détails dépendront de la manière exacte dont vous les lisez à partir d’Excel.