how to make figure that shown below
2 次查看(过去 30 天)
显示 更早的评论
Hi everyone, I want to draw this figure and the olors keep overlapping, so is there any help so I can draw the figure without overlapping. Thanks in advance. The code is below and the data is attached.
SORRY THE CODE WAS WRONG AND NOW IT IS CORRECTED
Here is the code
ttt=aaaa(:,1) % Set the time in minutes for figures % Rescale the time to look good in figures
tss=ttt/60; % Convert time to hours
%% tg is the important x-axis represents hours
tg = hours(tss) + minutes(0); % x Convert time to hours
tg.Format = 'hh:mm'; % Convert time to hours format
% These are three variables represent y-axis
PgridN11=1e6*aaaa(:,2); % y2 the original load forecast without shaving
Pshave=1e6*aaaa(:,3); % y3 the threshold parameter
for i=1:1:288
if PgridN11(i) >= Pshave(i)
Pgrid(i)=0.99*PgridN11(i);
else
Pgrid(i)=PgridN11(i);
end
if Pgrid(i) < Pshave(i)
Pgrid(i)=Pshave(i);
end
end
p1 = PgridN11;
p2 = Pshave;
x = linspace(0, numel(p1)-1, numel(p1));
idx = find(diff(sign(p1-p2))); % Approximate Indices Of The Intersections
for k = 1:numel(idx)
idxrng = max(1,idx(k)-1) : min(numel(p1),idx(k)+1);
xi(k) = interp1(p1(idxrng)-p2(idxrng), x(idxrng), 0);
yi(k) = interp1(x(idxrng),p2(idxrng),xi(k));
end
indexOfInterest=round(xi(1):xi(end));
set(gcf,'color','w');
% Plot the threshold with original load and load after shaving
figure(1)
plot(tg,Pgrid,'b','linewidth',1.9); hold on; % tg 'x' y1 'PLShave'
plot(tg,PgridN11,'-.k','linewidth',1.7); hold on; % y2 'PgridN11'
plot(tg,Pshave,'-.r','linewidth',1.5); % y3 'Pshave'
% the peak period
xlim([tg(1) tg(end)])
xlabel('time (hh:mm)');
ylabel('LoadForecating LF (W)');
grid on;
xline(tg(indexOfInterest(1)),'-.b','LineWidth',1.5)
xline(tg(indexOfInterest(end)),'-.b','LineWidth',1.5)
title('LoadForecating LF (W)');
legend('LF after Shaving','Orinignal LF','Threshold level');
%%
% this part to plot a zoom in of the original peak shaving to clarify more
% the details
% indexOfInterest = find(PgridN11 >= P_threshold); % the peak periodindexOfInterest = find(PgridN11 >= P_threshold); % the peak periodindexOfInterest1 = find(Pgrid >= P_threshold); % the peak period
axes('position',[.55 .155 .29 .25]);
box on % put box around new pair of axes
plot(tg(indexOfInterest),Pgrid(indexOfInterest),'b','linewidth',1.9);hold on;
plot(tg(indexOfInterest),PgridN11(indexOfInterest),'-.k','linewidth',1.5);hold on;grid on% plot on new axes% plot on new axes
legend('LF after Shaving','Orinignal LF');
axis tight
6 个评论
Rik
2022-5-12
I am trying to color the two areas under PgridN11 and Pgrid as shown in the figure and every time I do that, I get overlapping colors in the two-areas
You can now copy and paste the code and it will run. the problem is in the indexofinterest.
yes sir I corrected it. sorry about that. ttt=aaaa(:,1)
采纳的回答
KSSV
2022-5-12
load('aaaa.mat') ;
time = aaaa(:,1) ;
ttt=(time/60); % Set the time in minutes for figures % Rescale the time to look good in figures
tss=ttt/60; % Convert time to hours
%% tg is the important x-axis represents hours
tg = hours(tss) + minutes(0); % x Convert time to hours
tg.Format = 'hh:mm'; % Convert time to hours format
% These are three variables represent y-axis
PgridN11=1e6*aaaa(:,2); % y2 the original load forecast without shaving
Pshave=1e6*aaaa(:,3); % y3 the threshold parameter
Pgrid = Pshave ;
Pgrid(PgridN11 >= Pshave) = 0.99*PgridN11(PgridN11 >= Pshave) ;
% Plot the threshold with original load and load after shaving
tg = (1:288)' ;
figure(1)
set(gcf,'color','w');
plot(tg,Pgrid,'b','linewidth',1.9); hold on; % tg 'x' y1 'PLShave'
plot(tg,PgridN11,'-.k','linewidth',1.7); hold on; % y2 'PgridN11'
plot(tg,Pshave,'-.r','linewidth',1.5); % y3 'Pshave'
idx = find(PgridN11 >= Pshave) ;
P = [tg(idx) PgridN11(idx) ; tg(idx(end)) PgridN11(idx(end)) ; tg(idx(1)) PgridN11(idx(1))] ;
patch(P(:,1),P(:,2),'y')
idx = find(Pgrid >= Pshave) ;
P = [tg(idx) Pgrid(idx) ; tg(idx(end)) Pgrid(idx(end)) ; tg(idx(1)) Pgrid(idx(1))] ;
patch(P(:,1),P(:,2),'r')
% the peak period
xlim([tg(1) tg(end)])
xlabel('time (hh:mm)');
ylabel('LoadForecating LF (W)');
grid on;
% xline(tg(indexOfInterest(1)),'-.b','LineWidth',1.5)
% xline(tg(indexOfInterest(end)),'-.b','LineWidth',1.5)
title('LoadForecating LF (W)');
legend('LF after Shaving','Orinignal LF','Threshold level');
stop
%%
% this part to plot a zoom in of the original peak shaving to clarify more
% the details
% indexOfInterest = find(PgridN11 >= P_threshold); % the peak periodindexOfInterest = find(PgridN11 >= P_threshold); % the peak periodindexOfInterest1 = find(Pgrid >= P_threshold); % the peak period
axes('position',[.55 .155 .29 .25]);
box on % put box around new pair of axes
plot(tg(indexOfInterest),Pgrid(indexOfInterest),'b','linewidth',1.9);hold on;
plot(tg(indexOfInterest),PgridN11(indexOfInterest),'-.k','linewidth',1.5);hold on;grid on% plot on new axes% plot on new axes
legend('LF after Shaving','Orinignal LF');
axis tight
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Bar Plots 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!