Creating multiple plots from a data file using a for loop

26 views (last 30 days)
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
Anne Reuten
Anne Reuten on 10 Jul 2019
Edited: Anne Reuten on 10 Jul 2019
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.
Anne Reuten
Anne Reuten on 10 Jul 2019
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.

Accepted Answer

Guillaume
Guillaume on 10 Jul 2019
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.

More Answers (2)

KALYAN ACHARJYA
KALYAN ACHARJYA on 10 Jul 2019
plot(x',y');

Shubham Sangle
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))

Categories

Find more on 2-D and 3-D Plots in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!