Plot data from text file

I want to plot ReP^2+ImP^2 as function of numero = 5, 10, 15 …145 for each mode(m,n) I would like to have something like this with the name of the mode on each curve. Here is the beginning of my code, anyone can help ?
data = readfile(test.txt)
HeaderLines = 8;
for i=(HeaderLines+1):numel(tm)
%store in temp variable
if isempty(data{i}),continue,end
str=data{i};
line = str2num(str);
....
You can find my file attached.
Thank you in advance,

5 Comments

Rik
Rik on 23 Sep 2020
Without knowing how your data is stored in your text file it is difficult to give you advice. Is it the same structure as you have described here?
It is a good idea to read all your data into Matlab variables and only then do the plotting. That way you separate the two tasks. If you want to recycle either the plotting or the reading for a later project you will not have to go through every line to determine what you need. That modularity is a very useful strategy you see in action with my readfile function: instead of writing the same code again, I use the function.
'Without knowing how your data is stored in your text file it is difficult to give you advice. Is it the same structure as you have described here?'
Yes, it is the same, I attached the file, is that answered your question ?
Rik
Rik on 23 Sep 2020
That answered that question, yes.
The way I see it, you need to follow these steps:
  1. Load the data into Matlab variables
  2. Get the data for a single line
  3. Plot the line and create an annotation (e.g. with the text function)
  4. Repeat 2-3 for each combination of n and m
Try each step. If you have trouble with any of them, please describe what you tried.
I already start doing exactly what you described before posting here but it will be long since I have many (m,n) (14 in this case) so I will need 14 if m == .. n ==.. I wonder if there is a shorter way to do it. I note that we can know the combinations from line 6 in the text file : 'VECTEUR MODE : 4 4 4 4 3 3 3 2 2 2 1 1 1 1' which mean that we will have :
4 modes starting with 0 : m=0 and n change from 1 to 4 (0 1, 0 2, 0 3, 0 4)
4 modes starting with 1 (1 1, 1 2, 1 3, 1 4)
...
1 mode starting with 13 (13, 1)
So please tell me if you think there is a smarter way to do it using line 6 ? otherwise I will do what you already suggested.
Rik
Rik on 23 Sep 2020
You should convert the entire file. That means you will have a vector m with 5145 elements. Then you can use unique and use the result for a for loop, in which you can use ismember to extract all positions where m has a specific value.
You can also use that line to extract the values of m and n you need to combine.

Sign in to comment.

Answers (0)

Tags

Asked:

on 23 Sep 2020

Commented:

Rik
on 23 Sep 2020

Community Treasure Hunt

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

Start Hunting!