0

我想在 matlab 的同一张图上绘制多条线。我找不到最简单的方法来做到这一点。目前我有这样的事情:

for j=1:n
plot(j,total,'*')
hold on
end

total每次迭代的变化以及j. 这将制作我想要的情节,但使用“*”而不是线条。我想将这些星号与每种颜色的线连接起来。请记住,这total是一个长度为的向量k,因此在每次迭代中我都有k星号。

例如:

迭代1:j=1,总计=[0.2000 0.6000 0.2000]'

迭代2:j = 2,总计= [0.1000 0.6000 0.3000]'

迭代 3:j=3,总计 = [0.2095 0.4476 0.3429]'

X 轴为 1,2,3,Y 轴应有 0.2,0.1,0.2095 与这些点连接一条线和一个星号,0.6,0.6,0.4476 连接不同颜色的线和星号等。

4

4 回答 4

3

似乎您希望每行都有不同的颜色。在这种情况下,我建议:

figure
hold all
for j=1:n
    plot(j,total,'-*')
end

hold all和之间的区别hold on参见http://www.mathworks.com/help/matlab/ref/hold.html

有关如何指定线条样式的信息在这里http://www.mathworks.com/help/matlab/ref/linespec.html

基于有关数据的附加信息,示例代码为:

nData = 3;
dataset = zeros(n,nData);
for j = 1:n
    dataset(j,:) = total';
end

x = 1:n;
plot(x,dataset,'-*');
legend('data set 1','data set 2','data set 3')

在这种情况下hold不需要,因为所有数据都是一次绘制的。

于 2013-07-20T17:00:28.257 回答
1

您可能会发现使用较低级别的函数更容易。设置一些轴,然后在每次迭代时生成一个新的线对象(这通常比调用绘图更快)。下面的代码将为每次迭代在同一组轴上生成一条新线,从蓝色逐渐着色为红色。我假设您每次都可以从 j 生成 XVec:

myAx = axes;
for j=1:n
lineCol = [(j-1)/(n-1) 0 (1-((j-1)/(n-1)))];
line('XData',XVec(j,:),'YData',total,'color',lineCol,'linestyle','-','marker','*','Parent','myAx');
end

这消除了对hold命令的需要。

于 2013-07-20T16:26:12.257 回答
0

尝试:

plot(j,total,'-*');

前面-*意思是使用一条线和一个星号。

此外,将 放在循环开始之前会更整洁hold on,因为您只需要一次。

于 2013-07-20T16:02:41.790 回答
0

将所有数据作为列放入矩阵中:

j = 1:5;

data1 = [1 2 3 4 5];
data2 = [5 4 3 2 1];
data3 = [4 6 2 8 3];

y = [ data1; data2; data3 ].';
plot(j,y)

这会自动为每行设置不同的颜色

于 2013-07-21T11:16:26.103 回答