Creating multiple plots from a data file using a for loop

8 次查看(过去 30 天)
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 个评论
Anne Reuten
Anne Reuten 2019-7-10
编辑:Anne Reuten 2019-7-10
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 2019-7-10
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

请先登录,再进行评论。

采纳的回答

Guillaume
Guillaume 2019-7-10
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 个)

KALYAN ACHARJYA
KALYAN ACHARJYA 2019-7-10

Shubham Sangle
Shubham Sangle 2019-7-10
You can use this,
() indexing on a table returns a portion of a table as a table
plot(table(:, column1), table(:, column2))

类别

Help CenterFile Exchange 中查找有关 Loops and Conditional Statements 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by