График разброса цветов в 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).