Matlab разбрасывает две матрицы - проблема

Я пытаюсь понять, как работает функция разброса в Matlab. Например, у меня есть две матрицы:

 mat1= rand(20,20)
 mat2= rand(20,20)

На этом этапе мне нужно открыть фигуру и использовать функцию «разброса», чтобы отобразить график разброса значений в мат1 по сравнению со значениями в мат2. Что я сделал:

figure()
scatter(mat1,mat2)

Очевидно, что это неправильно. Но я не знаю, как это сделать. Кроме того, я прочитал документацию о функции разброса в документах Matlab Функция разброса — MATLAB DOCS

Предложения приветствуются! благодаря.


person Ofir Attia    schedule 05.11.2014    source источник


Ответы (3)


Поскольку функция scatter ожидает векторы (матрицы с одной строкой или одним столбцом), попробуйте

figure()
scatter(mat1(:),mat2(:))

Оператор (:) превращает матрицы в векторы.

person Andrey Rubshtein    schedule 05.11.2014
comment
Кстати, вы умеете различать значения матриц? например, векторы mat1 будут красными, а другие синими - person Ofir Attia; 06.11.2014
comment
@OfirAttia, написанная мной команда будет обрабатывать mat1 как значения x, а mat2 как значения y. Что ты имел в виду? - person Andrey Rubshtein; 06.11.2014

Scatter - это просто способ построения графика данных. Scatter отобразит данные в виде точек, не соединяя их. пытаться

mat1= rand(1,20) 
mat2= rand(1,20) 
subplot(121) 
scatter(mat1,mat2); 
subplot(122) 
plot(mat1,mat2) 

введите здесь описание изображения

person Ander Biguri    schedule 05.11.2014

Этот ответ является ответом на комментарий ОП с просьбой установить разные маркеры для разных цветов.

Подход 1: логическое индексирование
Требуется определить индекс для каждого цвета. В приведенном ниже примере красные маркеры выбираются случайным образом; остальные маркеры будут синими.

Двумерная точечная диаграмма с использованием разных цветов посредством логического индексирования

% MATLAB R2017a
mat1 = 100*rand(20,1);
mat2 = 100*rand(20,1);

idxRed = rand(20,1)> 0.5;
idxBlue = ~idxRed;

s(1) = scatter(mat1(idxRed),mat2(idxRed),[],'r','filled');
hold on
s(2) = scatter(mat1(idxBlue),mat2(idxBlue),[],'b','filled');

% Cosmetics
daspect([1 1 1])
box on
for j = 1:2
    s(j).MarkerEdgeColor = 'k';    
    s(j).MarkerFaceAlpha = 0.3;    % Transparency control
end

Подход 2: Пользовательская цветовая карта
Создайте пользовательскую colormap, которая напрямую отображает нужные вам цвета. В приведенном ниже примере цветовая карта содержит только два цвета. Логическая переменная idxRed имеет только два возможных значения, поэтому вызов caxis([0 1]) здесь не нужен.

Двухмерная диаграмма рассеяния с маркерами, окрашенными с помощью цветовой карты

% Create custom colormap  
col1 = [0 1 0]; % Green 
col2 = [1 0 0]; % Red
cmap = [col1;col2];
% Plot
colormap(cmap), hold on, box on
scatter(mat1,mat2,[],idxRed,'filled');
person SecretAgentMan    schedule 16.05.2019