我有一个NxM
矩阵W
,在函数中有浮点值。
我希望能够在图中显示每列X
次迭代的演变。
伪代码将是:
- open a window to show all values of column 1 of W..
- open a window to show all values of column 2 of W..
...
- open a window to show all values of column M of W
for iterations=1 to X
<here some updates on values in W are made>
{
for i=1:M {
for j=1:N {
update value of W(i,j) in window j (without re-opening the window)
}
}
}
我知道这样做的方法就像使用plot
函数一样,但即使阅读官方文档后我也不太了解它。
编辑3这是我现在的代码
[~:X] = size(W);
for i=1:X
plot(W(:,i));
end
有效。但是如何设置“只是打印点”?以及如何设置一个数字的位置(我的意思是,我的数字不会出现在另一个之上?
我的完全目标如下: 假设W是10 * 3矩阵。
我想拥有3个数字。
在每个图中应打印(并更新一定次数)列i中所有值的值。值应打印为AS POINTS(不像每个点与其他点链接的函数)。
每个POINT表示元素W(i,j)。更确切地说,该图应该是N-D空间的二维空间中的表示,其中N = W的行数。
还有其他建议吗?
答案 0 :(得分:3)
你正在尝试这个:
[~,X] = size(W);
for i=1:X
plot(W(:,i),[0:0.5:20],'none');
end
哪个不起作用,因为W
的每列有10行,[0:.5:20]
有40个元素。你需要有匹配长度的向量才能使用,你不需要。
根据您的描述,我认为您可能正在寻找subplot,其中包含多个包含在单个“数字窗口”中的设置:
figure;
[R,C] = size(W);
for i=1:C
subplot(C,1,i); #% creates axes for each column
plot(W(:,i),1:R,'.k'); #% has appropriate x values
#% ^---- '.k' indicates unconnected dots (.), colored black (k)
end
从下面的评论中,提问者正在寻找一种创建图形窗口的方法,以便每个窗口最多包含4个子图。有很多方法可以做到这一点;我在下面列出了一个选项。
num_subplots = 4;
[R,C] = size(W);
for i=1:C
this_subplot_position = mod(i,num_subplots) + 1;
if this_subplot_position == 1
figure;
end
subplot(num_subplots,1,this_subplot_position); #% creates axes for each column
plot(W(:,i),1:R,'.k'); #% has appropriate x values
#% ^---- '.k' indicates unconnected dots (.), colored black (k)
end
答案 1 :(得分:1)
通过窗口,我希望你的意思是数字。你能澄清一下吗?你有一个二维数组,你想在单独的数字中逐列绘制该列?
figure(i);
plot(W(:,i),[0:0.5:20],linespecs); %to plot ith column on y axis, and x axis as ur [0:0.5:20]
要进行更新,只需更改值,它应相应地更改数字。
答案 2 :(得分:0)
Matlab包含一个名为refreshdata
的命令,可以使这样的问题更容易一些。在下面的示例中,我们只绘制W
的每一列,但我们设置了YDataSource
属性,以便稍后调用refreshdata
时图会自动更新。 YDataSource
属性是包含有效变量或命令的字符串;在这里,第一个情节为W(:, 1)
,第二个情节为W(:, 2)
等。
for i_plot = 1:M
subplot(M, 1, i_plot);
plot(W(:, i_plot), '.', 'YDataSource', ['W(:, ' num2str(i_plot) ')']);
end
for i_plot = 1:M
for i_point = 1:N
W(i_point, i_plot) = rand;
refreshdata;
pause(0.1);
end
end