MATLAB: Plot3 Non mostra il 3 ° asse
Domanda
Tutte e tre le variabili che sto usando per trama sono matrice di dimensioni 1x1x100
. Sto usando questa riga di codice per tracciare:
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
Tuttavia, non sto ottenendo il terzo asse, e quindi la terza variabile CO2_molefraction_top_of_window
sulla trama. Posso sapere dove sbaglio?
Oltre alla domanda di cui sopra, ma sullo stesso argomento, voglio sapere se c'è qualche opzione in cui posso tracciare la trama dimensionale proprio come il diagramma tridimensionale che può essere disegnato usando plot3
?
Soluzione
Solo una nota --- devi solo fare il xlabel
ylabel
zlabel
comandi una volta (al di fuori del ciclo).
Anche:
- c'è qualche motivo per cui le tue matrici sono
1x1x100
invece di giusto100x1
o1x100
? Perché se li rimodellano a 2D puoi semplicemente fare la trama in un colpo. - Cosa intendi per "Missing Third Axis"? Quando eseguo il tuo codice (o il più vicino possibile, dal momento che non hai fornito un esempio riproducibile), io fare Ottieni un 3 ° asse:
.
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')
Questo dà quanto segue, in cui puoi vedere chiaramente tre assi:
Se sono le linee di griglia che vuoi rendere il grafico "più 3D", allora prova grid on
(che è negli esempi nel file di aiuto MATLAB per plot3
, Tentativo help plot3
Dal prompt matlab):
grid on
Dovrai chiarire un po 'di più "mancante terzo asse".
Altri suggerimenti
Quindi ho avuto lo stesso problema durante l'utilizzo plot3
. Per qualche motivo, usando il hold on
Comando "Aggrappa" la trama. Non sono sicuro del perché, ma sospetto che abbia qualcosa a che fare con l'operazione hold on
si esibisce sulla trama. EDIT: per chiarire, la trama 3D è ancora lì, ma la prospettiva è stata costretta a cambiare. Se si utilizza lo strumento "Ruota 3D" (quello con una freccia attorno a un cubo), è possibile vedere che il grafico è 3D, la prospettiva predefinita è semplicemente dritta, quindi solo due assi sono visibili e appare piatto.
Mi sono imbattuto in un problema simile e come @drofdarb è il hold on
Sembra appiattire un asse. Ecco uno snippet del mio codice, spero che questo aiuti.
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
Al contrario di:
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