MATLAB Answers

0

Creating multiple plots from a data file using a for loop

Asked by Anne Reuten on 10 Jul 2019
Latest activity Answered by Shubham Sangle on 10 Jul 2019
Hi all,
I am very new to Matlab, and I am trying to plot multiple figures from a dataset using a for loop.
However, it's not working and I don't how to solve it.
The idea is that the loop plots 42 different figures (one for each participant), and that the first figure contains the data from the 1:14 row from columns 3 (x-axis) and column 5 (reaction times), figure 2 should contain the data from the 15:28 row from columns 3 (x-axis) and column 5 (y-axis), etc..
Below is the code that I have used:
Thai_UniversalPictures_Categorization = readtable('Thai_UniversalPictures_Categorization.xlsx'); % This is the table with the data
figure;
hold on;
for i = 1 : 14 : 588(Thai_UniversalPictures_Categorization); % I would like 42 figures
x = Thai_UniversalPictures_Categorization(i:1+13, 3); % The x-axis should contain the picture's names, which are located in the third column of the data file. The i:1+13 was written as an attempt to tell the code it's a loop and that it should take the first 14 pictures' names for the first figure, the next 14 pictures for the second figure etc.
y = Thai_UniversalPictures_Categorization(1:1+13, 5); % The y-axis should contain reaction times , which are located in the fifth column of the data file. The i:1+13 was written as an attempt to tell the code it's a loop and that it should take the first 14 reaction times for the first figure, the next 14 reaction times for the second figure etc.
plot(x,y);
end
I get an error which says:
Error using tabular/plot
Too many input arguments.
Error in outlierplots (line 11)
plot(x,y);
I hope you can follow my explanation and help me.
Best regards, Anne

  6 Comments

Thank you for your help, but I don't really understand what you mean.
If I just type this:
plot(Thai_UniversalPictures_Categorization{1:14, 5})
The figure shows up and I get no error message.
That data is still accessed from a table, but no error message?
Also, the tables' size are both 14x1 right?
I have adapted the code to this:
Thai_UniversalPictures_Categorization = readtable('Thai_UniversalPictures_Categorization.xlsx');
%% Reaction time
for i = 1 : 14 : 588(Thai_UniversalPictures_Categorization);
figure;
hold on;
plot(Thai_UniversalPictures_Categorization{i:1+13, 5}); title('Reactiontime');
end
It is now creating 42 figures, but only the first one contains data (from the first 14 rows) and the others are empty.
I think I managed to get it working correctly.
In case someone else is trying to do a similar thing and is struggling, I used this code:
Thai_UniversalPictures_Categorization = readtable('Thai_UniversalPictures_Categorization.xlsx');
%% Reaction time
for i = 1 : 14 : 588(Thai_UniversalPictures_Categorization);
figure;
hold on;
plot(Thai_UniversalPictures_Categorization{i:i+13, 5}); title('Reactiontime');
end

Sign in to comment.

3 Answers

Answer by Guillaume
on 10 Jul 2019
 Accepted Answer

I see you've solved your problem, but for future reference the problem had nothing to do with plot. The problem was with your incorrect use of indexing.
() indexing on a table returns a portion of a table as a table
{} indexing on a table returns a portion of the content of the table as whatever type that content is.
Alternatively, you can use . indexing to get a particular variable of the table, so
plot(sometable(:, somecolumn), sometable(:, someothercolumn))
is never going to work as you are passing tables to plot
plot(sometable{:, somecolumn}, sometable{:, someothercolumn})
or
plot(sometable.nameofsomecolumn, sometable.nameofsomeothercolumn)
is the correct syntax.

  1 Comment

Thank you very much for your explanation!

Sign in to comment.


Answer by KALYAN ACHARJYA on 10 Jul 2019

plot(x',y');

  0 Comments

Sign in to comment.


Answer by Shubham Sangle on 10 Jul 2019

You can use this,
() indexing on a table returns a portion of a table as a table
plot(table(:, column1), table(:, column2))

  0 Comments

Sign in to comment.