我想给聚类的代码加一个图形化界面,需要输入一些数据和一些参数并输出聚类后的图像和一些评价指标的值。
gpt说 可以用 app designer
界面元素设计
在 设计视图 中直接拖动即可
如图1,我拖进去一个 按钮 ,图2 红色部分 出现一行 Button
怎么传参 是个问题
首先要把 现有的代码 封装成一个函数 方便传入参数和返回参数
然后放一个 按钮 点击按钮时 调用函数
1 输入
可以 根据需要 拖 编辑字段(数值)或 编辑字段(文本)
如果需要输入 文件 或 文件路径 可以 加一个按钮 并为按钮设置 回调函数,如下:
[fileName, path] = uigetfile('*.mat', 'Select Data File');
if fileName ~= 0app.DatabaseFile.Value = fullfile(path, fileName);
end
app.DatabaseFile 是 接收文件或文件路径 的 编辑字段(文本)
!另:对于 编辑字段(数值)如果要求是整数可以包一个 round()四舍五入,增强鲁棒性,没有要求就不用加了,eg:
% 获取用户输入的参数
databaseFile = app.DatabaseFile.Value;
m = round(app.ResamplePoints.Value);
% .Value就是对应组件的值
2 输出
对于聚类结果,输出有两种:
1)聚类后的可视化图像
2)聚类结果的评价指标
想把代码里的结果传回GUI 可以在聚类函数的参数的最后 加一个 app,eg:
trackAnalysis(databaseFile, m, a, imgFolder, centerSize, numComponent, epsilon, minPts, app);
比如想返回评价指标,可以拖一个 编辑字段(数值),在聚类函数中加一行
app.DBI.Value = dbi_eval.CriterionValues;
% 把dbi_eval.CriterionValues赋给app.DBI.Value
这样,GUI中的DBI组件就是显示对应的值
对于聚类后的图像 说是图像,其实就是在坐标区域做的图
比如我想放一个2D聚类结果,可以拖一个 坐标区 命名为 fig2D
然后在聚类代码中
% 用
hold(app.fig2D, 'on'); % 在同一个图中叠加绘制
% 代替
figure;
hold on; % Hold the plot to overlay all clusters% 加app.fig2D
plot3(app.fig2D, trajectory(:, 1), trajectory(:, 2), trajectory(:, 3), 'Color', colors(i, :));% 设置坐标区属性
title(app.fig2D, '2D');
xlabel(app.fig2D, 'X/m');
ylabel(app.fig2D, 'Y/m');
zlabel(app.fig2D, 'Z/m');
hold(app.fig2D, 'off'); % 释放当前图形对象
grid(app.fig2D, 'off');
最后的最后
在代码结尾处 end 前 加
% 返回图像和指标值
return
运行,输入参数,就成功喽
不成功也别灰心,控制变量看看是哪有问题
加油