我使用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.
有什么建议吗?
答案 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)。