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

时间:2015-02-07 00:49:11

标签: matlab colors matlab-figure scatter-plot scatter

我使用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.

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

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

[X,Y] = meshgrid(1:n,1:n);

scatter(X(:),Y(:),10,data(:));

答案 1 :(得分:1)

scatter允许您根据“Z”值为 每个 点绘制具有不同选项(颜色,大小等)的点,但它创建了许多图形对象(每个点一个)。

在您的情况下,您只有2个子集数据(在所有点中)。值为1且值为0的点。所以另一个选择是提取这两个子集,然后用每组子公共属性绘制每个子集。

%% // 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)。 dots