Making the Trend Equal??

3 views (last 30 days)
Kang Min Kim
Kang Min Kim on 25 Dec 2019
Commented: Kang Min Kim on 30 Dec 2019
Line two is upside down as compared to line one
And as shown above,
I want to make Line 2 the same as Line 1.
The picture above is my guess.
Do you have any mathematical methods or other methods?
My English is not good sorry.

Accepted Answer

Image Analyst
Image Analyst on 25 Dec 2019
You can fit a line through curve 1. Then subtract the max of curve two and add the fitted line to it.
coefficients = polyfit(x1, y1, 1); % Fit a line.
% Get the line at locations where you have x2.
line1 = polyval(coefficients, x2);
% Find the max of curve 2.
y2max = max(y2);
% Make output curve (curve 3)
y3 = y2 - y2max + line1; % Tilt curve 2 upwards at the slant of curve 1
If you need more help, please attach the two curves in a .mat file with the paper clip icon.
  6 Comments
Image Analyst
Image Analyst on 25 Dec 2019
Do you mean something like this:
clc; % Clear the command window.
clear all; % Including global variables.
close all force; % Close all figures (except those of imtool.)
workspace; % Make sure the workspace panel is showing.
filebrowser;
format short g;
format compact;
fontSize = 14;
t = 0:300;
dailyFluct = gallery('normaldata',size(t),2);
sdata = cumsum(dailyFluct) + 20 + t/100;
figure
subplot(1, 3, 1);
plot(t, sdata, 'b-', 'LineWidth', 2); % Plot original y data
% legend('Original Data','Location','northwest');
grid on;
xlabel('Time (days)');
ylabel('data');
title('Original data', 'FontSize', fontSize);
coefficients = polyfit(t, sdata, 1); % Fit a line.
% Get the line at locations where you have x2.
line1 = polyval(coefficients, t);
hold on;
plot(t, line1, 'r-', 'LineWidth', 2); % Plot line
legend('original y', 'Line through y');
% Find the max of curve 1.
y1min = sdata(1);
% Make the upside down data.
y2 = -sdata;
subplot(1, 3, 2);
plot(t, sdata, 'b-', 'LineWidth', 2); % Plot original y data
hold on;
plot(t, line1, 'r-', 'LineWidth', 2); % Plot line
plot(t, y2, 'c-', 'LineWidth', 2); % Plot upside down (negative) data
grid on;
title('Upside down data', 'FontSize', fontSize);
% Shift y2 upwards so that the first points start at the same y location.
y2 = y2 + 2 * y1min;
plot(t, y2, 'm-', 'LineWidth', 2); % Plot line
legend('original y', 'Line through y', 'Negative y', 'Negative y shifted upwards');
% Make output curve (curve 3)
y3 = 2 * line1 + y2 - 2 *y1min; % Tilt curve 2 upwards at the slant of curve 1
subplot(1, 3, 3);
plot(t, sdata, 'b-', 'LineWidth', 2); % Plot original y data
hold on;
plot(t, line1, 'r-', 'LineWidth', 2); % Plot line
plot(t, y3, 'm-', 'LineWidth', 2);
grid on;
title('Both original and Upside down data', 'FontSize', fontSize);
legend('original y', 'Line through y', 'y3, tilted upwards');
0000 Screenshot.png
Kang Min Kim
Kang Min Kim on 30 Dec 2019
thank you for your answer
I want to replace line through y with the moving average(30days) of original y.
I would appreciate it

Sign in to comment.

More Answers (0)

Categories

Find more on Specifying Target for Graphics Output in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!