借助ginput函数在figure窗口实时读取、展示多条曲线的坐标值

这篇博客介绍了如何使用MATLAB的ginput函数实时读取多条曲线上的数值。通过创建一个无限循环,程序不断读取用户点击的点,并找出最近的数据点,更新legend显示对应的y值。代码示例展示了如何绘制多条正弦曲线并进行实时交互,提供了一种简单实现GUI功能的替代方案。
摘要由CSDN通过智能技术生成

MATLAB借助ginput函数实时读取多条曲线数值

客户希望实时读取每条曲线上的数值。感觉做成GUI太复杂了,不太会写回调函数之类的东西。网上看到有用ginput函数来实现读取figure窗口坐标的 。

基本的调用格式如下,

[xread,yread] = ginput(1);%获得一个点

这个调用格式可以通过MATLAB自带的教程,查看函数说明,不再赘述,我这个命令的意思就是获得一个点的坐标。我获得这个点的坐标以后,我进行了进一步的处理。判断读取到的xread最接近哪一个数据点的横坐标x,读取x对应的y值即可。显示的内容我利用了legend的属性,将x坐标展示在了title的位置,每一条曲线上的y值展示在了legend的位置。

代码如下:

%多条曲线,同时显示读取数据
clc;clear all;close all;
ymax=2;ymin=-2;%单位亿元  这个是纵轴,需要手动调整一下,因为每个图像的最大最小值可能有区别
xmin=0;xmax=20;%时间分钟,前一半是9:31到11:30,后一半时13:00到15:00
xi=xmin:0.1:xmax;
y1=sin(xi+1);
y2=sin(xi+2);
y3=sin(xi+3);
y4=sin(xi+4);
y5=sin(xi+5);
figure;
set(gcf,'outerposition',get(0,'screensize'));%窗口自动最大化
plot(xi,y1,'LineWidth',2);hold on
plot(xi,y2,'LineWidth',2);hold on
plot(xi,y3,'LineWidth',2);hold on
plot(xi,y4,'LineWidth',2);hold on
plot(xi,y5,'LineWidth',2);hold on
xticks(0:3:20);xlim([0,20])
ylim([ymin,ymax]);
xlabel('时间');ylabel('金额(亿元)')
char1=['y1'];
char2=['y2'];
char3=['y3'];
char4=['y4'];
char5=['y5'];
legend(char1,char2,char3,char4,char5);
try
    while 1
        [xread,yread] = ginput(1);%获得一个点
        xdelta=abs(xi-xread);
        xindex=find(xdelta==min(xdelta));%确定最接近的索引
        char1=['y1= ',num2str(y1(xindex))];
        char2=['y2= ',num2str(y2(xindex))];
        char3=['y3= ',num2str(y3(xindex))];
        char4=['y4= ',num2str(y4(xindex))];
        char5=['y5= ',num2str(y5(xindex))];
        lgd=legend(char1,char2,char3,char4,char5);
        lgdtext=['xi= ',num2str(xi(xindex))];
        lgd.Title.String=lgdtext;
        pause(0.1)
    end
catch

end




初始状态

初始状态

读取数值
在这里插入图片描述

还可以继续读

在这里插入图片描述

利用死循环,让程序一直执行,只要不关闭这个绘图窗口就可以一直执行读取任务。
展示结束以后还可以通过try catch 来转到别的运行任务上去。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值