Dividing data set into subsets and plot them on same graph, with individual trend lines
이전 댓글 표시
I have a file, file.dat. it have over 40,000 entries (1 column x 40,000 rows). i divided the whole data into 6 equal parts (columns) by using the code below:
%V1 is my data,
Z1 = 6*fix(numel(V1)/6); %numel(V1) counts number of elements in V1. it is numeL, not 1(one); fix(A) will round the number to nearest integer (floor)
M1 = reshape(V1(1:Z1),[],6);
i want to plot each of the six parts (columns) on the same figure one after other(simply figure is divided into 6 equal parts) and want to draw trend line for each part separately. I also want to see the equation of each trend line. Slop of each trend line is important to me.
답변 (2개)
Star Strider
2018년 2월 9일
If you have the Statistics and Machine Learning Toolbox, using the lsline (link) function is likely easiest:
figure(1)
AxH = axes('NextPlot','add')
for k1 = 1:size(M1,2)
scatter((1:size(M1,1)), M1(:,k1))
end
hl = lsline;
for k1 = 1:numel(hl)
B = [ones(size(hl(k1).XData(:))), hl(k1).XData(:)]\hl(k1).YData(:);
Slope(k1) = B(2);
Intercept(k1) = B(1);
end
Slope
Intercept
The ‘Slope’ vector are in the order the data are plotted, so ‘Slope(1)’ is the slope of ‘M1(:,1)’, and so for the others.
Jos (10584)
2018년 2월 9일
% create artificial data
N = 6 ; % number of data sets
M = arrayfun(@(k) polyval([randi(10) 2*k], 1:10), 1:N, 'un',0) ;
M = cat(1,M{:}).' ;
M = M + randi(10,size(M)) - 5 ; % add a little noise
% engine
ph = plot(M,'o') % plot at once, each column is a separate object
% fit the lines through each column
p = arrayfun(@(k) polyfit(1:size(M,1), M(:,k)',1),1:size(M,2), 'un', 0)
lh = cellfun(@(c) refline(c(1), c(2)), p) % plot the lines, retrieve the handles
카테고리
도움말 센터 및 File Exchange에서 Discrete Data Plots에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!