Matlab: Plot3 ne montrant pas le 3ème axe
Question
Les trois variables que j'utilise pour tracer sont une matrice de taille 1x1x100
.J'utilise cette ligne de code pour tracer:
hold on;
for i=1:100
plot3(R_L(:,:,i),N_Pc(:,:,i),CO2_molefraction_top_of_window(:,:,i),'o');
xlabel('R_L');
ylabel('N_P_c');
zlabel('CO_2')
end
Cependant, je n'obtiens pas le troisième axe, et donc la troisième variable CO2_molefraction_top_of_window
sur le tracé.Puis-je savoir où je me trompe?
En plus de la question ci-dessus, mais sur le même sujet, je veux savoir s'il y a une option où je peux tracer un tracé en 4 dimensions tout comme le tracé en 3 dimensions qui peut être dessiné en utilisant plot3
?
La solution
Juste une note --- il vous suffit d'exécuter les commandes xlabel
ylabel
zlabel
une fois (en dehors de la boucle).
Aussi:
- y a-t-il une raison pour laquelle vos matrices sont
1x1x100
au lieu de simplement100x1
ou1x100
? Parce que si vous les remodelez en 2D, vous pouvez simplement faire le tracé en un seul coup. - Qu'entendez-vous par "troisième axe manquant"? Lorsque j'exécute votre code (ou aussi près que possible, puisque vous n'avez pas fourni d'exemple reproductible), j'obtiens un troisième axe:
.
X = rand(1,1,100); % 1x1x100 X matrix
Y = rand(1,1,100); % 1x1x100 Y matrix
Z = rand(1,1,100); % 1x1x100 Z matrix
% Now, we could do a for loop and plot X(:,:,i), Y(:,:,i), Z(:,:,i),
% OR we can just convert the matrix to a vector (since it's 1x1x100 anyway)
% and do the plotting in one go using 'squeeze' (see 'help squeeze').
% squeeze(X) converts it from 1x1x100 (3D matrix) to 100x1 (vector):
plot3(squeeze(X),squeeze(Y),squeeze(Z),'o')
xlabel('x')
ylabel('y')
zlabel('z')
Cela donne ce qui suit, dans lequel vous pouvez clairement voir trois axes:
Si c'est le quadrillage que vous voulez rendre le graphique "plus 3D", alors essayez grid on
(qui se trouve dans les exemples du fichier d'aide Matlab pour plot3
, essayez help plot3
depuis l'invite Matlab):
grid on
Vous devrez clarifier un peu plus le "troisième axe manquant".
Autres conseils
J'ai donc eu le même problème lors de l'utilisation de plot3
.Pour une raison quelconque, l'utilisation de la commande hold on
"aplatit" le tracé.Je ne sais pas pourquoi, mais je soupçonne que cela a quelque chose à voir avec l'opération que hold on
effectue sur l'intrigue.
Edit: Pour clarifier, le tracé 3D est toujours là, mais la perspective a été forcée de changer.Si vous utilisez l'outil "Rotation 3D" (celui avec une flèche autour d'un cube), vous pouvez voir que le graphique est en 3D, la perspective par défaut est juste droite, donc seuls deux axes sont visibles et il apparaît à plat.
Je suis tombé sur un problème similaire et comme @ Drofdarb, le hold on
semble aplatir un axe.Voici un extrait de mon code, j'espère que cela vous aidera.
for iter = 1:num_iters:
% hold on;
grid on;
plot3(tita0,tita1, num_iters,'o')
title('Tita0, Tita1')
xlabel('Tita0')
ylabel('Tita1')
zlabel('Iterations')
hold on; % <---- Place here
drawnow
end
Contrairement à:
for iter = 1:num_iters:
grid on;
hold on; % <---- Not here
plot3(tita0,tita1, num_iters,'o')
title('Tita0, Tita1')
xlabel('Tita0')
ylabel('Tita1')
zlabel('Iterations')
% hold on;
drawnow
end