Sensing the data changes and plotting

I have a table "a" which has multiple rows and 2 columns; t for time and q for data. I attached here.
I want to plots the period only where the sudden change of value happens (from start to end of the changes) such as I showed in figure where the value jumped from nearly -4 to -43.65.
After that I'd like to generate a table of the data of the plot. There will be many periods where such kind of data changes occurs so I want to plot everytime with that data changes.
load = 'newdata3.csv';
data = readtable(load);
data = sortrows(data,'Var1','ascend');
timetable(data.Var1, data.Var2);
plot(data.Var1,data.Var2)
findchangepts(data.Var2,'MaxNumChanges',20)
Here, I tried and it is not showing at the correct changes points. There are 12 changes points and it is only showing 5 of them. I don't know how to fix this.

Answers (1)

Do you have the Image Processing Toolbox? If so, it's easy.
v = a.V;
mask = v > 200
props = regionprops(mask, 'PixelIdxList');
numRegions = numel(props);
coords = vertcat(props.PixelIdxList);
startingRows = coords(:, 2);
or something similar. It would have been easier if you had read the posting guidelines and remembered to attach your data.
To learn other fundamental concepts, invest 2 hours of your time here:
If you have any more questions, then attach your data and code to read it in with the paperclip icon after you read this:

12 Comments

Thank you for your guideline. I watched that free 2 hours training. That was helpful. I took your advice and improved my question with the attachment. But your code is not working for my file. Can you take a look into it again with my attached csv file?
Yes, I tried. It doesn't show any changes
Your data looks weird:
a = readtable('newdata3.csv')
a = 126000×2 table
Var1 Var2 ___________ _______ 12:14:54 AM -3.3268 12:14:54 AM -4.1778 12:14:54 AM -4.6337 12:14:54 AM -4.729 12:14:54 AM -4.9851 12:14:54 AM -4.2736 12:14:54 AM -3.2882 12:14:54 AM -2.257 12:14:54 AM -1.5046 12:14:54 AM -1.6617 12:14:54 AM -1.4103 12:14:54 AM -2.4553 12:14:54 AM -3.3668 12:14:54 AM -4.193 12:14:54 AM -5.1044 12:14:54 AM -5.133
t = a.Var1;
v = a.Var2;
plot(t, v, 'b-');
grid on;
mask = v > 20;
props = regionprops(mask, 'PixelIdxList');
numRegions = numel(props)
numRegions = 310
startingRows = vertcat(props.PixelIdxList)
startingRows = 6462×1
54011 54013 54014 54015 54016 54017 54018 54019 54020 54021
I think that's lack of table sorting. After I read the table in MATLAB, I sort the rows ascending with time. a = sortrows(a,'Var1','ascend'); Maybe that's why.
OK, what's your threshold? It looks like you could use a global threshold everywhere, like 5 or something.
The threshold is 20 and -20.
Is it possible to use image processing commands for data processing?
Yes, of course. Images are data. And many of the image processing functions work just as well on 1-D signals as well as 2-D and 3-D images.
Are there anyway to generate graph automatically in the areas when big data changes happens?
Yes. But I don't know what you want.
If you have any more questions, then attach your data and code to read it in with the paperclip icon after you read this:
I think you didn't understand my question. That's the question I'm asking from the start. I can plot in conventional way. According to the plot, you can see that there are 6 places where big data changes happen.
What I want is I want the MATLAB to sense the data automatically and generate a graph where a big data changes is sensed.
In this case, I want the MATLAB to automatically generated 6 figures where big data changes occurs.
I hope this explanation is clear to you.

Sign in to comment.

Products

Asked:

on 27 Oct 2022

Commented:

on 1 Nov 2022

Community Treasure Hunt

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

Start Hunting!