我正在使用此代码组合两个图
plot(x1,y1,'.','MarkerSize',20,'Color','r');
hold on; grid on;
plot(x2,y2,'x','MarkerSize',10,'Color','b');
xlim([-a a]);
ylim([-a a]);
现在我想更改x1
,y1
和x2
,y2
的值,以便在我的图中包含多个点和一个十字。我尝试使用for循环来计算新值,但每次迭代此代码都会生成另一个数字 - 而我只想要一个包含所有点的数字。
我做了类似的事情:
for i=1:1:8
% do things that compute x1,x2,y1,y2
figure; hold on
plot(x1,y1,'.','MarkerSize',20,'Color','r');
hold on; grid on;
plot(x2,y2,'x','MarkerSize',10,'Color','b');
xlim([-a a]);ylim([-a a]);
i=i+1;
end
我还尝试将hold on
放在i=i+1
之前,但仍然给我一个新的数字。
答案 0 :(得分:2)
你可以做几件事:
简单的解决方案是将figure
命令放在循环之外:
figure(); hold on;
for ...
plot(x1, ...);
plot(x2, ...);
end
更好的解决方案是首先计算所有值,然后绘制它们:
[x1,y1,x2,y2] = deal(NaN(8,1));
for ind1 = 1:8
% do some computations
x1(ind1) = ...
...
y2(ind1) = ...
end
figure(); plot(x1,y1,'.',x2,y2,'x');
最好的解决方案(在我看来)是更新现有的绘图对象,当新的数据点可用时:
[x1,y1,x2,y2] = deal(NaN(8,1));
figure(); hP = plot(x1,y1,'.',x2,y2,'x');
for ind1 = 1:8
% do some computations
hP(1).XData(ind1) = <newly-computed x1>
hP(1).YData(ind1) = <newly-computed y1>
hP(2).XData(ind1) = <newly-computed x2>
hP(2).YData(ind1) = <newly-computed y2>
end