所以我仍然习惯了Matlab,并且在绘图方面遇到了一些麻烦。我有一个单元格,其中包含每行中的点列表。我想在同一个图表上绘制不同颜色的每一行点,以便我可以比较它们。问题在于我需要对未知数量的点和行进行此工作(即每次运行程序时点和行的数量都会改变)。
例如,我可能有我的单元格数组A:
A = {[0,0],[1,2],[3,4]; [0,0] [5,6],[9,2]}
我希望将第1行中的点与其索引(因此是3D图形)进行绘制,然后将第2行中的点放在同一图表上以不同颜色显示。行总是相同的长度。 (每行总是具有相同的点数)。我尝试了一些不同的for循环,但似乎无法做到这一点。
非常感谢任何向我发送正确方向的帮助!
答案 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在同一个图上绘制线条,然后最后只需使线条颜色成为尺寸的函数,当你循环时,你总是有一个不同的线条颜色