2013-06-05 130 views
1

多个行我有这种格式存储数据输入文件:绘制在Matlab

x1 y1 x2 y2 

这是一个行,它代表了一个线两分。现在,我有很多这样的行 和我需要绘制一条线的每一行。有没有一些有效的方法来做到这一点? 我是否必须分别通过for循环遍历每行?我用什么命令 画线?

谢谢

+0

我不坚持,我问有效的方式来做到这一点。如果我使用循环并分别绘制每条线,那么可以吗? – user2381422

回答

1

尝试这样的事情,你可能需要改变%f %f %f %f格式:

fid = fopen('yourfile', 'r'); 

C = textscan(fid, '%f %f %f %f'); 

fclose(fid); 

figure(100) 
plot(C{:, 1}, C{:, 2}, C{:, 3}, C{:, 4}); % column based lines 

figure(200) 
plot([C{1} C{3}]', [C{2}, C{4}]'); % row based lines 

;

+0

但是如果我有1000行? – user2381422

+1

textscan将读取它们全部,如果你想要读取第一个1000然后使用'C = textscan(fid,'%f%f%f%f',1000',查看文档 – Nick

+0

谢谢,我可以接受你的在4分钟内回答 – user2381422

0

一旦进一步调查,我发现在其他答案中的绘图方法不能像预期的那样工作。

当下面输入文件测试:

0 1 3 2 
1 2 9 4 
5 6 7 8 

的问题来看这应该给的三条直线曲线。第1行应该从坐标x = 0,y = 1开始,并在x = 3,y = 2的点终止。其余的同样如此。

当与所提供的码读取:

fid = fopen('yourfile', 'r'); 
C = textscan(fid, '%f %f %f %f'); 
fclose(fid); 

所得的C值为C = {[0;1;5], [1;2;6], [3;9;7], [2;4;8]};。这很好,很好。

plot(C{:, 1}, C{:, 2}, C{:, 3}, C{:, 4});绘制这是结果: plot(C{:, 1}, C{:, 2}, C{:, 3}, C{:, 4});

这是因为剧情会画一条线系列X=C{:,1}; Y=C{:,2};,这两者在这个例子中的三个点长,另一条线路为X=C{:,3}; Y=C{:,4};

为了绘制三个独立的线路,由[x1 y1][x2 y2],你可以使用下面的代码指定端点:

plot([C{1} C{3}]', [C{2}, C{4}]'); 

plot,当提供矩阵作为X和Y参数将绘制为每列一个单独的线,所以这会导致:

plot([C{1} C{3}]', [C{2}, C{4}]');

+0

如问题所述,文件由'x1 y1 x2 y2'组成,所以我想在你的第一个图中看到2行请求。 – Nick

+0

@Nick“这是一行,它代表了一行的两个点。现在,我有**许多这样的行**和**每行我需要画一条线**。” (强调加) – Alan

+0

我明白你的意思了。我会修改答案,但我想知道-1是否需要:) – Nick