Matlab: Plot3 не показывает 3-ю ось - PullRequest
0 голосов
/ 21 февраля 2012

Все три переменные, которые я использую для построения графика, являются матрицами размера 1x1x100. Я использую эту строку кода для построения:

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

Однако я не получаю третью ось и, следовательно, третью переменную CO2_molefraction_top_of_window на графике. Могу ли я знать, где я не прав?

Помимо вышеуказанного вопроса, но по той же теме, я хочу знать, есть ли какой-нибудь вариант, где я могу построить 4-мерный график, точно так же, как 3-мерный график, который можно нарисовать, используя plot3?

Ответы [ 3 ]

4 голосов
/ 29 мая 2017

Так что у меня была такая же проблема при использовании plot3. Почему-то использование команды hold on «выравнивает» сюжет. Я не уверен почему, но я подозреваю, что это как-то связано с операцией hold on, выполняемой на графике. Изменить: чтобы уточнить, 3D-график все еще там, но перспектива была вынуждена изменить. Если вы используете инструмент «Повернуть 3D» (со стрелкой вокруг куба), вы увидите, что график - это 3D, перспектива по умолчанию - просто прямая, поэтому видны только две оси, и она выглядит плоской.

1 голос
/ 21 февраля 2012

Просто примечание - вам нужно всего лишь один раз выполнить команды xlabel ylabel zlabel (вне цикла).

Также:

  • isесть ли причина, по которой ваши матрицы 1x1x100 вместо 100x1 или 1x100?Потому что, если вы измените их в 2D, вы можете просто нанести изображение за один удар.
  • Что вы подразумеваете под «отсутствующей третьей осью»?Когда я запускаю ваш код (или настолько близко, насколько могу, поскольку вы не предоставили воспроизводимый пример), я делаю получаю 3-ю ось:

.

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')

Это дает следующее, в котором вы можете четко видеть три оси: enter image description here

Если вы хотите, чтобы график выглядел более "трехмерным", попробуйте grid on (который находится в примерах в файле справки Matlab для plot3, попробуйте help plot3 из приглашения Matlab):

grid on

enter image description here

Вам придетсяуточнить немного «отсутствующую третью ось».

0 голосов
/ 13 апреля 2019

Я столкнулся с подобной проблемой, и, как @ Drofdarb's, hold on, кажется, выравнивает одну ось.Вот фрагмент моего кода, надеюсь, это поможет.

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

enter image description here


В отличие от:

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

enter image description here

...