在Matlab中绘制点行

时间:2013-04-12 10:50:30

标签: matlab plot

所以我仍然习惯了Matlab,并且在绘图方面遇到了一些麻烦。我有一个单元格,其中包含每行中的点列表。我想在同一个图表上绘制不同颜色的每一行点,以便我可以比较它们。问题在于我需要对未知数量的点和行进行此工作(即每次运行程序时点和行的数量都会改变)。

例如,我可能有我的单元格数组A:

A = {[0,0],[1,2],[3,4]; [0,0] [5,6],[9,2]}

我希望将第1行中的点与其索引(因此是3D图形)进行绘制,然后将第2行中的点放在同一图表上以不同颜色显示。行总是相同的长度。 (每行总是具有相同的点数)。我尝试了一些不同的for循环,但似乎无法做到这一点。

非常感谢任何向我发送正确方向的帮助!

2 个答案:

答案 0 :(得分:0)

您可以将其转换为矩阵并直接绘制它:

% Some dummy data - format a little different from your example 
% to allow for different numbers of elements per row
A = {[0,0, 1,2, 3,4]; [0,0, 5,6]};

% Figure out how many columns we need in total
maxLen = max(cellfun(@length, A));
% Preallocate
Amat = NaN(size(A, 1), maxLen);
% Copy data
for n = 1:size(A, 1)
    curA = A{n}; 
    Amat(n, 1:length(curA)) = curA; 
end

% Generate 1:N vector repeated the correct number of times (rows)
x = repmat(1:size(Amat, 2), size(Amat, 1), 1);
plot(x, Amat)

修改:您在帖子的某个位置提到了3D图表。上面不会绘制3D图形,所以这里有一些东西:

% Generate Amat as above

% Then:
[X, Y] = meshgrid(1:size(Amat, 1), 1:size(Amat, 2));
surf(X, Y, Amat.'); % OR: plot3(X, Y, Amat.');

我不确定这究竟是你想要的,但你的问题有点不清楚你究竟想要什么样的图形。如果您只想在地块上使用彩色线条,则可以使用plot3代替surf,但恕我直言surf可能会为您提供更清晰的此类数据。

答案 1 :(得分:0)

点和行的数量随每次迭代而变化的事实不应该造成太大问题。我建议在绘图循环(尺寸(A,1)和尺寸(A,2))之前使用尺寸函数来获得矩阵的尺寸。

一旦你有了矩阵的大小,循环维度并使用holdon在同一个图上绘制线条,然后最后只需使线条颜色成为尺寸的函数,当你循环时,你总是有一个不同的线条颜色