查看: 474|回复: 4|关注: 0

[已解决] GUI popupmenu控件,使用switch case选择value值, 导致图像互相影响,求解

[复制链接]

入门

62 麦片

财富积分


50500


5

主题

19

帖子

0

最佳答案
使用popupmenu控件,value取值不同时,在同一个axes中绘制不同图像,互不影响
使用了 switch case 确定点击的是下拉菜单的哪一行
现在,菜单不同选择顺序,导致图像互相影响,出现在一起,如图所示,图一是第一行,图二是第二行
请问该如何解决,谢谢大家
11.png 22.png
回复主题 已获打赏: 0 积分

举报

入门

62 麦片

财富积分


50500


5

主题

19

帖子

0

最佳答案
 楼主| 发表于 2020-3-25 12:07:19 | 显示全部楼层
  1. var = get(handles.kj1,'value');%当用户下拉菜单时,得到控件1的value值,传递给var

  2. c1=3.741832e-16; %第一辐射常数 W*m^2
  3. c2=1.438786e-2; %第二辐射常数 m*K
  4. k = 1.380662e-23; % 玻尔兹曼常数
  5. h=6.626e-34; %普朗克常数
  6. c=2.998e8; %光速
  7. axes(handles.axes1)

  8. global T



  9. switch var %根据var不同取值,绘制不同曲线
  10.     case 1
  11.     t=1400:100:2000; %热力学温度向量
  12.     n=length(t); %向量长度
  13.     lambda=[0:0.01:5]*1e-6; %波长向量
  14.     lambda(1)=eps; %给零加一小量使分母不为零
  15.     [T1,L]=meshgrid(t,lambda); %波长和温度矩阵
  16.     M=2*pi*h*c^2./(exp(h*c./(k*T1.*L))-1)./L.^5;%单色辐射能力

  17.     plot(lambda*1e6,M) %画曲线

  18.     hold on %保持图像
  19.     [mx,ix]=max(M); %找最大值和下标
  20.     stem(lambda(ix)*1e6,mx,'--','filled') %画直杆图
  21.     fs=16; %字体大小
  22.     text(lambda(ix)*1e6,mx,[num2str(lambda(ix)'*1e6)],'fontsize',fs)%显示峰值波长

  23.     hl=legend([repmat('T=',n,1),num2str(t'),repmat('K',n,1)]);%标记图例
  24.     set(hl,'fontsize',fs) %设置图例大小

  25.     title('普朗克黑体单色辐射能力与波长的关系','fontsize',fs)%标题
  26.     xlabel('波长\it\lambda\rm / \mum','fontsize',fs) %横坐标,it斜体,\lambda是λ,rm常规字体,\mu是μ
  27.     yl='单色辐射能力\rmM\rm(\it\lambda\rm,\rmT\rm) / (W\cdotm^-^2\cdotμm^-^1)';%纵坐标标记
  28.     ylabel(yl,'fontsize',fs) %纵坐标
  29.    
  30.     case 2
  31.    
  32.     L = [0:0.01:5]*1e-6;
  33.     M=2*pi*h*c^2./(exp(h*c./(k*T.*L))-1)./L.^5; % 计算指定温度光谱辐出度
  34.     plot(L*1e6,M,'-b','LineWidth',1.4) % 绘制光谱辐出度曲线

  35.     hold on %保持图像
  36.     [mx,ix]=max(M); %找最大值和下标
  37.     stem(L(ix)*1e6,mx,'--','filled') %画直杆图
  38.     fs=16; %字体大小
  39.     text(L(ix)*1e6,mx,[num2str(L(ix)'*1e6)],'fontsize',fs)%显示峰值波长

  40.     maxM = max(M) % 找出指定温度最大光谱辐出度
  41.     i=find(maxM==M); % 找峰值波长点
  42.     text(L(i+20),M(i+20),[num2str(T),'K'],'VerticalAlignment',...
  43.     'baseline','HorizontalAlignment','left','fontsize',7)

  44.     title('普朗克黑体单色辐射能力与波长的关系','fontsize',16)%标题
  45.     xlabel('波长\it\lambda\rm / \mum','fontsize',16) %横坐标,it斜体,\lambda是λ,rm常规字体,\mu是μ
  46.     yl='单色辐射能力\rmM\rm(\it\lambda\rm,\rmT\rm) / (W\cdotm^-^2\cdotμm^-^1)';%纵坐标标记
  47.     ylabel(yl,'fontsize',16) %纵坐标
  48.    
复制代码
回复此楼 已获打赏: 0 积分

举报

入门

62 麦片

财富积分


50500


5

主题

19

帖子

0

最佳答案
 楼主| 发表于 2020-3-25 12:27:03 | 显示全部楼层
搜站内提供的方法是使用,figure,但使用figure就会脱离GUI,另外创建一个窗口,
回复此楼 已获打赏: 0 积分

举报

论坛优秀回答者

中级

1056 麦片

财富积分


5001500


9

主题

1168

帖子

156

最佳答案
  • 关注者: 34
发表于 2020-3-25 12:48:17 | 显示全部楼层 |此回复为最佳答案
dzhfdb 发表于 2020-3-25 12:27
搜站内提供的方法是使用,figure,但使用figure就会脱离GUI,另外创建一个窗口, ...

在你的代码中增加如下处理

  1. h=6.626e-34; %普朗克常数
  2. c=2.998e8; %光速
  3. axes(handles.axes1)
  4. cla reset   % <-- 新增代码

  5. global T
复制代码
回复此楼 已获打赏: 0 积分

举报

入门

62 麦片

财富积分


50500


5

主题

19

帖子

0

最佳答案
 楼主| 发表于 2020-3-25 12:54:20 | 显示全部楼层
曦飛 发表于 2020-3-25 12:48
在你的代码中增加如下处理

感谢您的回答,已经解决
回复此楼 已获打赏: 0 积分

举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

快速回复 返回顶部 返回列表