根据 0 或 1 值在 Matlab 中绘制颜色散点图

Color scatter plot in Matlab according to 0 or 1 value

我用 0 和 1 填充网格 data=zeros(n,n);(如果您愿意,也可以将其视为邻接网格)。我只想根据该点的值是 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.

有什么建议吗?

你告诉 matlab 只绘制 n 个点 ((1,1), (2,2), ..., (n,n)) 你实际上想要笛卡尔积 (1:nX1:n ). 尝试

[X,Y] = 网状网格(1:n,1:n);

散点图(X(:), Y(:), 10, 数据(:));

scatter 允许您为 each 点绘制具有不同选项(颜色、大小等)的点,具体取决于一个 '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)。