how to plot each bin of data individually?

I am having the follwoing issues:
I have a table with three variables: time in hours, altitude and solar activity, according to a time interval of 3hrs I have divided my data into 8 bins using the function discretize.
How can we plot the data within each bin indiviually, i.e we have 8 bins we would like to have a graph for each bin, that is for each interval of time, so at the end we get 8 graphs.
in the plot the data of each row sholud be presented for ex by a dot.
attached is a text file containing a sample of the data I am working with.

 Accepted Answer

As per usual, would be easier to demonstrate with some real data to work with...but
tD=table(repmat([0:23].',4,1),randi([150 200]*1000,96,1),randi([10 70],96,1),'VariableNames',{'Hours','Altitude','Activity'});
tD.Bin=discretize(tD.Hours,8);
splitapply(@(x,y) plot(x,y,'*'),tD.Altitude,tD.Activity,tD.Bin)
xlabel('Altitude, ft')
ylabel('Activity, units')
tCenter=[1.5:3:24]; % bin time centers 0-3, 3-6, 6-9, ...
legend(compose('Time Bin %4.1f hrs',tCenter.')) % label by the group time centers
might be a fair starting point...

3 Comments

MA
MA on 18 Oct 2021
Edited: MA on 18 Oct 2021
Thank you for the help. but is there any way that would allow us to get the plot for only the rows of data within a certain bin ?
I'm sure there is, but what, specifically, do you mean? The above is for each bin.
MA
MA on 18 Oct 2021
Edited: MA on 18 Oct 2021
What I mean is that the plot here will display all the bins together in one plot. But what if we are interested in visualizing only the data within a certain bin. since the bins we have represents intervals of time, we would like the plot to plot only one specified bin i.e specified interval of time. would that be possible?

Sign in to comment.

More Answers (2)

OK, here's another example; I'll add it as its own Answer -- carrying on from the above
uBin=unique(tD.Bin);
for i=uBin(:).'
nexttile
isBin=(tD.Bin==i);
scatter(tD.NE8(isBin),tD.GDALT(isBin),'.')
legend("Bin "+i,'Location','best')
xlabel('NE, units'),ylabel('GDALT, ft')
box on
end

1 Comment

That is exactly what I am after, I really appreciate all the help you provided, thank you so, so much.

Sign in to comment.

Can you tell us which of the thumbnail pictures for the plotting functions included in MATLAB look closest to what you want to plot? If none of them do and you have other MathWorks toolboxes installed, open the Plots tab on the Toolstrip and see if any of the functions from a toolbox have thumbnails that look closer (maybe a boxplot from Statistics and Machine Learning Toolbox?)

6 Comments

scatter plot would be the one.
we are expecting ot get something as the one shown in the image below, but this is for all the data not for each indiviual bin.
Maybe you want the gscatter function or the gplotmatrix function, each from Statistics and Machine Learning Toolbox?
I guess I thought it would be self-evident how to do one at a time; presumed you had something far more exotic in mind..
isBin=(tD.Bin==1);
scatter(tD.NE8(isBin),tD.GDALT(isBin),'.')
legend('Bin 1','Location','southeast')
box on
produces
Simply pick the bin number of interest and do logical addressing to extract those elements with that specific bin.
Obviously you could wrap this in a little 2-3 line function so just give it the number of interest.
Thank you for all the help, I didn't think of it in this way, didn't expect it to be that simple. thanks a lot.
It's easy to overthink a problem, indeed... :)
Glad to help.
Investigate rowfun and friends if you do other analyses on these data by the grouping variable(s) -- extremely powerful construct for such purposes.
Thank you for the advice, I will definitely check them out.

Sign in to comment.

Categories

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

Products

Release

R2021b

Asked:

MA
on 17 Oct 2021

Commented:

MA
on 19 Oct 2021

Community Treasure Hunt

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

Start Hunting!