Creating multiple plots from a data file using a for loop

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 个评论

It says this:
Name Size Bytes Class Attributes
x 14x1 3196 table
y 14x1 1272 table
YOu cannot input table to plot.....you can access the data data using:
x.(1)
y.(1)
But note that, your tables are of different size......to plot, the data should be of same size.
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

请先登录,再进行评论。

 采纳的回答

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.

更多回答(2 个)

类别

帮助中心File Exchange 中查找有关 Tables 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by