在matlab中为每一行绘制多边形

时间:2016-09-09 13:33:46

标签: matlab

我有一个Excel文件,如下所示。每行包含几个点(x,y)。根据每行中的点数,我想在MATLAB中为每一行绘制多边形。这怎么工作?

对于一行,我做了以下内容:

x=[49.2 49.2 50.081 50 49.2 ]; 
y=[36.8 37 36.86 36.594 36.8 ]; 
patch(x,y,'g');

但我无法弄清楚如何从文件中读取所有行并为每行创建补丁。

我的Excel文件如下所示:

x         y       x       y,...
49.4    35.583  49.424  35.828  51.02   35.766  50.9    35.52   49.4    35.583      
50.933  36.836  50.931  36.586  52.224  36.163  52.21   36.527  50.933    36.836        
50.23   36.168  51.232  36.164  51.779  35.977  51.72   35.68   51.02   35.766  50.23   36.168

结果情节应该像这样说:

Desired Result

1 个答案:

答案 0 :(得分:2)

您可以使用xlsread功能阅读Excel文件。您还可以提供工作表名称和范围,例如

X = xlsread('myFile.xls', 'Sheet 1', 'B1:D5');
但是,这是可选的。要阅读文件第一张的所有内容,只需使用

即可
X = xlsread('myFile.xls');

注意:这只返回数字数据,因此会自动删除标题。因此,您将拥有一个包含所有行的矩阵X。所以我们可以开始策划了。我们首先显示背景图像,然后执行一个遍历矩阵所有行的for循环:

% Show background image
figure(1);
imshow(yourBackgroundImage);

% Specify different colors (taken from https://mathworks.com/matlabcentral/answers/8558-plot-different-colors-while-using-loops)
% Note: you need as many entries / colors in this cell array as you have rows in your file!
C = {'k','b','r','g','y',[.5 .6 .7],[.8 .2 .6]} 

% Go through all rows
for k=1:size(X,1)
    % Take k-th row and reshape it so x is on first row and y on second row
    y = reshape(X(k,:), 2, []);

    % Draw polygon with no FaceColor (i.e. not filled)
    patch(y(1,:), y(2,:), 'b', 'EdgeColor', C{k}, 'FaceColor', 'None');
end