用matlab绘制一个sin函数的一个衍射图像,类似用光线照射圆孔得到衍射图像一样,用光线照射一个正弦函数的模型或者孔,得到他的衍射图像
不知道你这个问题是否已经解决, 如果还没有解决的话:直接上代码:
%%载入数据
%%画近红外光谱图
[row,lie] = size(data_re);
X = data_re;
figure(1)
for j =1:row
i =1:lie;
xlabel('Wavelength/nm');
ylabel('Abosorbance');
title('近中红外光谱图');
plot(i+2800,X(j,:),'y');
hold on
end
%%画特征波长图
% Y = data_re(:,NMir_index-860);
% for j =1:1
% i =1:lie;
% xlabel('Wavelength/nm');
% ylabel('Abosorbance');
% title('近中红外光谱图');
% plot(NMir_index+1940,Y(j,:),'*r');
% hold on
% end
%%变量分布区
H_pa = patch([2834,2834,3120,3120],[-0.05,0.4,0.4,-0.05],[.6 .6 .8]);%%%特征波长所在阴影部分
set(H_pa,'EdgeColor',[.8 .8 .8],'EdgeAlpha',0.5,'FaceAlpha',0.5)
H_pa1 = patch([3572,3572,3878,3878],[-0.05,0.4,0.4,-0.05],[.6 .6 .8]);
set(H_pa1,'EdgeColor',[.8 .8 .8],'EdgeAlpha',0.5,'FaceAlpha',0.5)
H_pa2 = patch([4150,4150,4698,4698],[-0.05,0.4,0.4,-0.05],[.6 .6 .8]);
set(H_pa2,'EdgeColor',[.8 .8 .8],'EdgeAlpha',0.5,'FaceAlpha',0.5)
由于数据是正在发表的一篇论文,就不在此处展示。首先需要画出预处理之后的光谱图,在此基础上,查找特征,特征落在哪一段就在哪一段画出阴影。最后整体显示出来就是下文的图形。
在此,需要说明一下阴影图的画法。
网上有patch这个函数。是这么写的:patch([X down left, X top left, X top right, X down right], [Y left down, Y left up, Y rigth up, Y rigth down],[阴影颜色])。这里简单说一下patch后的第一个[]里放的是左边最低的X对应的值,左边最高的X对应的值,右边最高的对应X的值,右边最低的对应X的值。因为问我画的是矩形,所以前后两数字都相同。后面类似。
这里分享个寻找XY值的小窍门
先画出特征波长图,查看特征波长大致落在几个区间。查看存放特征波长值的文件,找出每个区间的最左最右面的值,即为我们画图时用的X对应的左右值。
欢迎交流!
2021-12-6