MATLAB中选择1条或者几条曲线显示,同时更新名称

本文介绍了如何在MATLABAppDesigner中实现根据用户复选框选择动态显示不同曲线及其图例的功能,使用图形句柄和独立的图例字符串列表进行控制。
摘要由CSDN通过智能技术生成

MATLAB中选择1条或者几条曲线显示,同时更新名称@TOC

说明

答案由文心一言生产,测试有效。

问题

使用legend显示3条曲线的名称,但是3条曲线是否显示是可选择的,比如选择画曲线1和曲线3,那legend显示的名称也要对应曲线1和曲线2,曲线2不显示,名称也不显示

答案

在 MATLAB App Designer 中,如果您想要根据用户的选择来显示不同曲线的图例,并且遇到了使用句柄与图例字符串组合时出现错误的问题,那么您可能需要调整您的代码以确保正确处理图形句柄和图例信息。

首先,澄清一点:在 MATLAB 中,plot 函数返回的句柄是指向图形对象的,而不是直接用于图例的。图例是通过将图形句柄传递给 legend 函数来创建的。但是,您不需要将句柄和图例字符串组合成一个数组或单元数组。相反,您应该分别存储句柄和图例字符串,并在需要时将它们传递给 legend 函数。

% 假设 app.UIAxes 是您的 UIAxes 对象  
% 假设您有三个复选框控件:app.CheckBoxCurve1, app.CheckBoxCurve2, app.CheckBoxCurve3  
% 用户可以通过这些复选框来选择是否显示相应的曲线  
  
% 准备数据  
xData = linspace(0, 2*pi, 100);  
yData1 = sin(xData);  
yData2 = cos(xData);  
yData3 = tan(xData); % 注意:tan 函数在这里可能会产生无穷大值,需要处理  
  
% 初始化用于存储句柄的数组  
lineHandles = [];  
  
% 检查哪些曲线被选中并绘制它们  
if app.CheckBoxCurve1.Value  
    lineHandles(end+1) = plot(app.UIAxes, xData, yData1);  
    hold on;  
end  
if app.CheckBoxCurve2.Value  
    lineHandles(end+1) = plot(app.UIAxes, xData, yData2);  
    hold on;  
end  
if app.CheckBoxCurve3.Value  
    % 处理 tan 函数的无穷大值  
    finiteYData3 = yData3;  
    finiteYData3(isinf(finiteYData3)) = NaN;  
    lineHandles(end+1) = plot(app.UIAxes, xData, finiteYData3);  
    hold on;  
end  
  
% 根据绘制的曲线显示图例  
legendStrings = {};  
if app.CheckBoxCurve1.Value  
    legendStrings{end+1} = 'Curve 1';  
end  
if app.CheckBoxCurve2.Value  
    legendStrings{end+1} = 'Curve 2';  
end  
if app.CheckBoxCurve3.Value  
    legendStrings{end+1} = 'Curve 3';  
end  
  
% 如果绘制了至少一条曲线,则显示图例  
if ~isempty(lineHandles)  
    legend(app.UIAxes, legendStrings);  
end  
  
% 设置轴的其他属性(可选)  
app.UIAxes.XLabel.String = 'X Axis';  
app.UIAxes.YLabel.String = 'Y Axis';  
app.UIAxes.Title.String = 'Plot of Selected Curves';

在这个示例中,lineHandles 数组用于存储绘制每条曲线时返回的句柄。然后,根据复选框的选择状态来构建 legendStrings 单元数组,该数组包含要显示在图例中的字符串。最后,使用 legend 函数将图例添加到轴上,但仅当绘制了至少一条曲线时才这样做。

请注意,hold on 在每次绘制新曲线时都会被调用,以确保所有选中的曲线都绘制在同一个轴上。然而,在这个特定的场景中,由于每次绘制都是基于条件判断的,因此实际上不需要在每个条件块之后都调用 hold on。相反,您可以在绘制任何曲线之前调用一次 hold on,并在所有曲线绘制完成后调用 hold off(如果需要的话)。但是,在 App Designer 中,通常不需要显式调用 hold off,因为每次绘制新图形时,UIAxes 会自动管理其状态。在这个例子中,我没有包括 hold off 调用,因为 App Designer 通常会处理图形的叠加状态。

结果

满足预期。

图示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 15
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值