How to plot a function on an existing plot

조회 수: 6 (최근 30일)
Chalisa Mawla
Chalisa Mawla 2022년 6월 30일
댓글: Voss 2022년 6월 30일
I have this code 'bandstructure' that allows me to plot data from 101 files and gives 680 nm TM.fig.
I also have this code 'plotlightlines' that plot functions and give 680 nm lightlines.fig (a bunch of y=kx functions that generates lightlines from my calculation)
How I might be able to overlap those plots using the frequency range (y range) of '680 nm TM.fig' so that I can compare the simulations with theoretical calculations? x in both plots should be from 0 to 0.5
I tried to add 'hold on' and add the functions at the end of 'bandstructure' but it is not generating the plot correctly.
Thank you in advance.

채택된 답변

Voss
Voss 2022년 6월 30일
It seems to work ok. Here I'm using different data for the image because I don't have your txt files.
% bandstructure.m (modified)
figure();
xx = linspace(0,0.5,101);
yy = linspace(2e14,6.5e14,101);
imagesc(xx,yy,sqrt(xx.^2+(yy(:)/13e14).^2))
colorbar
%set(gca(),'YDir','reverse')
colormap (flipud(turbo)); axis xy;
xlabel('kx')
xticklabels({'0','0.1','0.2','0.3','0.4'})
ylabel('Frequency (Hz)')
hold on
x=linspace(0,1,101);
y=abs(3*10^8*x/(1.45*6.8*10^(-7)));
plot(x,y)
% plotlightlines.m
k=linspace(0,0.5,101);
v1=abs(3*10^8*k/(1.45*6.8*10^(-7)));
v2=abs(3*10^8*k/(2.25*6.8*10^(-7)));
v1plus=abs(3*10^8*(k-1)/(1.45*6.8*10^(-7)));
v2plus=abs(3*10^8*(k-1)/(2.25*6.8*10^(-7)));
v1minus=abs(3*10^8*(k+1)/(1.45*6.8*10^(-7)));
v2minus=abs(3*10^8*(k+1)/(2.25*6.8*10^(-7)));
v1plus2=abs(3*10^8*(k-2)/(1.45*6.8*10^(-7)));
v2plus2=abs(3*10^8*(k-2)/(2.25*6.8*10^(-7)));
v1minus2=abs(3*10^8*(k+2)/(1.45*6.8*10^(-7)));
v2minus2=abs(3*10^8*(k+2)/(2.25*6.8*10^(-7)));
plot(k,v1,k,v2,k,v1plus,k,v2plus,k,v1minus,k,v2minus,k,v1plus2,k,v2plus2,k,v1minus2,k,v2minus2)
In the image you showed, it looks like there's a line plotted at or near ( x=0 , y=0 to 3e14 ), which caused the axes ylim to go down to 0. Maybe this line was created by plotting something incorrect while you were working on your code. To avoid this type of spurious plot, it's a good idea to create a new figure() before your plotting commands, so your plots always go into a new figure that's unaffected by what was plotted previously.
  댓글 수: 4
Chalisa Mawla
Chalisa Mawla 2022년 6월 30일
Oh dear, that helps A LOT!
Voss
Voss 2022년 6월 30일
I'm glad it helps!

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 2-D and 3-D Plots에 대해 자세히 알아보기

제품

Community Treasure Hunt

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

Start Hunting!

Translated by