Filter löschen
Filter löschen

How do I perform cumulative adding of data by month and then plot it by year?

1 Ansicht (letzte 30 Tage)
I have data in a 8500x3 matrix - columns being year, month, day of each earthquake (all are in numerical representation - e.g. 1985 01 23). The data is in chronological order, with oldest first. As the number of earthquakes varies per day, the number of rows dedicated to each day/month/year changes.
I need to make a plot of cumulative number of earthquakes per month. I know I have to assign a one to every earthquake, but my problem comes in the cumulative adding. How do I add the data from one month in a given year to the next month? The problem arises due to the changing year as well.
Example of data:
[1985 01 01; 1985 01 12; 1985 01 14; 1985 01 25; 1985 03 02; 1985 06 16; 1985 06 18; 1985 11 09; 1986 01 01; 1986 01 30] ...
I hope I explained this easily.
Thanks, Gareth

Akzeptierte Antwort

Star Strider
Star Strider am 11 Feb. 2016
I don’t understand your Question and your ‘desired output’. This accumulates the total number in each month, and then the cumulative sum:
Seism = [1985 01 01; 1985 01 12; 1985 01 14; 1985 01 25; 1985 03 02; 1985 06 16; 1985 06 18; 1985 11 09; 1986 01 01; 1986 01 30];
SeismDN = datenum([Seism(:, 1:2) ones(size(Seism,1),1) zeros(size(Seism,1),3)]);
[SeismU,~,Idx] = unique(SeismDN,'stable');
SeisHist = accumarray(Idx,1);
Result = [str2num(datestr(SeismU, 'yyyy mm')) cumsum(SeisHist)]
Result =
1985 1 4
1985 3 5
1985 6 7
1985 11 8
1986 1 10
  9 Kommentare
Gareth Maver
Gareth Maver am 12 Feb. 2016
Basically there is another column with earthquake magnitude values in it - ranging from 2.0 up to about 5.0. How would I code to only count the earthquakes above value 3.0 for the cumulative sum?
Star Strider
Star Strider am 12 Feb. 2016
This is how I would edit the original date and magnitude matrix:
datenms = datenum(bsxfun(@plus, [1985 01 01], [zeros(20,1) [1:20]' zeros(20,1)])); % Create Dates
Data = [datenms rand(20,1)*3.3+2]; % All Dates & Magnitudes
Data3 = Data(Data(:,2) > 3,:); % Select Magnitude > 3
If you wanted only the dates, in this example you would select ‘Data3(:,1)’.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Seismology finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by