График разброса цветов в Matlab по значению 0 или 1

Я заполняю сетку data=zeros(n,n); с 0 и 1 (можно также рассматривать как сетку смежности, если хотите). Я просто хочу построить сетку с цветами в зависимости от того, равно ли значение в этой точке 0 или 1. Например,

scatter(1:n,1:n,data);

Это дает мне ошибку:

Error using scatter (line 77)
C must be a single color, a vector the same length as X, or an M-by-3 matrix.

Какие-либо предложения?

2 ответа

Решение

Вы говорите, что Matlab строит только n точек ((1,1), (2,2), ..., (n,n)), где вы хотите получить декартово произведение (1:nX1:n). Пытаться

[X,Y] = сетка (1:n,1:n);

разброс (X(:), Y(:), 10, данные (:));

scatter позволяет строить точки с разными параметрами (цвет, размер и т. д.) для каждой точки в зависимости от значения "Z", но создает множество графических объектов (по одному для каждой точки).

В вашем случае у вас есть только 2 подмножества данных (среди всех ваших точек). Очки со значением 1 и со значением 0, Таким образом, другой вариант состоит в том, чтобы извлечь эти 2 подмножества и построить каждый поднабор с каждым набором общих свойств.

%% // prepare test data
n = 10 ;
data=randi([0 1],n); %// create a 10x10 matrix filled with `0` and `1`

%% // extract the 2 subsets
[x0 , y0] = find( data == 0 ) ;
[x1 , y1] = find( data == 1 ) ;

%% // display
figure ; axes('Nextplot','add')

plotOptions = {'LineStyle','none','MarkerEdgeColor','k','MarkerSize',10} ; %// common options for both plots 

plot(x0,y0,'o','MarkerFaceColor','r', plotOptions{:} ) %// circle marker, red fill
plot(x1,y1,'d','MarkerFaceColor','g', plotOptions{:} ) %// diamond marker, green fill

Таким образом, вы получаете полный контроль над каждым свойством подмножества (вы можете контролировать размер, цвет, форму и т. Д.). И у вас есть только 2 графических объекта для обработки (вместо n^2).точек

Другие вопросы по тегам