0

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

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

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

我想根据它们的索引绘制第 1 行中的点(所以是 3D 图),然后将第 2 行中的点以不同的颜色显示在同一张图上。行将始终具有相同的长度。(每行将始终具有相同的点数)。我尝试了一些不同的 for 循环,但似乎无法做到这一点。

任何帮助我朝着正确的方向前进将不胜感激!

4

2 回答 2

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,此类数据可能会为您提供更清晰的绘图。

于 2013-04-12T10:55:22.880 回答
0

点和行的数量可以随着每次迭代而改变这一事实应该不会造成太大的问题。我建议在绘图循环之前使用 size 函数(size(A,1) 和 size(A,2))来获取矩阵的维度。

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

于 2013-04-12T11:04:56.637 回答