图片缩略图

使用Matlab OOP创建专用图表

版本1.3 (16.9 MB) 肯Deeley
工具箱包含各种自定义任务特定的图表。

52下载

更新2019年11月06

查看版本历史记录

查看许可证

这个工具箱包含了技术文章“用MATLAB面向对象编程创建专门的图表”的MATLAB代码。这些例子是由MathWorks的Ken Deeley、David Sampson、Michele Facchinelli、Davide Fantin和Bruno Rodriguez Esteban开发的。这个File Exchange条目包含本文中使用的所有代码和示例。

图表提供了特定于特定于特定于应用程序编程接口(API),用于创建自定义可视化。设计和实现图表不仅为最终用户提供了方便的API,还可以同时删除用户对低级图形对象进行操作。

代码包括几个自定义MATLAB图表的例子,以及一个浏览可用图表的目录应用程序。

您可以查看每个图表所使用的源代码,研究每个图表的特性和功能,并运行Live Script示例来演示每个图表的使用。该应用程序提供了几个不同的自定义图表示例,以及文档和资源,以帮助您开始开发自己的图表。

引用

肯Deeley(2021)。使用Matlab OOP创建专用图表(//www.tatmou.com/matlabcentral/fileexchange/65857-creating-specialized-charts-with-matlab-oop), MATLAB中央文件交换。检索

意见及评分(16.

肯Deeley

嗨洛根,

好问题。通常,图表会私下维护它们的图形对象(也就是说,它们不会向用户公开内部图形)。这可以防止意外删除、修改或其他未经授权的操作。不幸的是,这样做的一个副作用是,一些方便的函数(如hold)不能工作,因为它们需要访问图表的轴,而图表轴是私有存储的。

你的问题的一个解决方案是创建一个版本的ScatterFit,它支持XData和YData属性的2D矩阵,而不是当前的实现,允许XData和YData仅为向量。金宝app然后,每一对列(XData(:, k), YData(:, k))可以被视为具有自己的最佳拟合行的单独数据集。您还可以支持这样一种情况,即X金宝appData是一个向量,YData是一个矩阵,并将YData的每一列解释为要在相同的XData向量上绘制的数据集。实现这一点将支持您的需求——用户可以更改XDat金宝appa/YData图表属性,而不是使用hold on。请随便看一看电视机。XData,集。ScatterFit中的YData方法。

非常感谢您的反馈,

夸克Q.

洛根迅速

“ScatterFit”功能是否支持在同一图形上的多个数据集,金宝app如带有“hold on”的散点?谢谢。

肯Deeley

嗨太浩,

非常感谢你花时间提供反馈。我们以前在同事开发的图表中看到过这个问题。问题是,如果轴的HandleVisibility属性设置为“off”,那么轴工具栏的交互使用将被禁用。

例子:

ax = axes("HandleVisibility", "off");禁用交互式工具栏

斧子。HandleVisibility =“on”;%工具栏使用现在可用

我们将图表中的HandleVisibility属性设置为“off”的原因是为了防止用户通过另一个绘图操作无意中删除或修改图表的图形对象。例如,当调用plot函数时,默认行为是查找可用于绘图的最新坐标轴,然后使用该坐标轴创建绘图。

作为解决方法,您可以使用Suppervisibility设置为“ON”的图表的轴创建,这将为您提供对交互式轴工具栏的访问。此外,为了最大限度地减少对由其他绘图操作引起的图表无意中干扰的风险,您应该将包含图表的顶级图的Huppervisibility设置为“OFF”。(请注意,将图表面板的Huppervisibily设置为“关闭”并不能解决问题,因为面板不保护其轴儿童免于未经授权的策划。)

谢谢你的报告-我们将把这个反馈反馈给我们的图形开发团队,以供将来考虑。

太浩-施

任何想法为什么带缩放,平移,数据光标等的轴工具栏在创建其中一个图表时不会出现?甚至为“obj.axbar(obj.axes,'default')”命令添加到构造函数不起作用“。迫使Menubar和工具栏在exampleFigure函数中创建栏...但按钮不起作用。以某种方式由于它们的编码方式,图表类和单个绘图类可以摆脱此功能?

肯Deeley

谢谢马丁,
很好,谢谢你的反馈。我已经提交了一个更正的版本,应该很快就会出现。

马丁·莱克纳

图表图标中的错误仍然存​​在。如果未安装所有必要的工具箱,则从ChartCatalog(例如“Financial Toolbox”)中删除一些图表。在这种情况下,图表图标的初始化会搞砸。要修复此错误,我更改了Cataloglauncher类中的以下两行:

第123行:[ChartList,〜,Indexchart] =交叉(UserAccessibleCharts,ChartNames);
第142行:“ImageSource”,S.ChartTiles(indexChart(k))。瓷砖,……

我喜欢ChartCatalog的想法,以及将文档创建为mlx-files,包括打开Live脚本或查看源代码的链接。

肯Deeley

谢谢马丁,
我将很快更新文件交换条目。

马丁·莱克纳

嗨,肯,
很明显,这个应用程序需要R2019b,但在MATLAB Release Compatibility中的文件交换页面的入口是:
创建R2019b
与任何版本兼容
你能将“兼容任何版本”更改为至少R2019b吗?

在图表目录中,除了循环目录圆柱和EdgeWorthBowley外,不同图表的按钮上的图标是错误的。LINEELCORECTOR显示LINGRADINT的图标,雷达显示了LINEELECTOR的图标,...

谢谢,马丁

肯Deeley

萨姆你好,
你已经安装了R2019b吗?这个应用程序需要R2019b的各种特性,包括uihtml和错误消息中引用的新的colororder函数。
谢谢,

山姆

嗨,肯,
当我安装你的应用程序时,我有几个错误。你知道怎么解决吗?

使用ChartCatalog(第10行)错误
类“CatalogLauncher”中的属性“DefaultColors”的默认值无效:
未定义的功能或变量'colorOrder'。

ChartCatalogApp/startApp错误(第86行)
obj。AppHandle = eval(“chartCatalog”);

ChartCatalogApp(第48行)错误
startApp (obj)

AppInstall.internal.RunApp>执行(第116行)中出现错误
OUT =评估('呼叫者',[脚本';');

AppInstral.Internal.RunApp> RunApp13a(第95行)中出现错误
Outobj = Execute(fullfile(appInstalldir,[wrapperfile'app.m'])));

appInstall.internal.RunApp>前提码18B(第60行)中出错
appobj = runapp13a(appinstalldir);

AppInstall.internal.RunApp(第13行)错误
= preamble18b (appinstalldir);

在matlab.apputil.run错误(第45行)
appinstall.internal.RunApp(AppName,Applocation);

肯Deeley

嗨,保罗,

非常感谢您的反馈。制作热图就是一个很好的例子。您可以将彩色地图与坐标轴关联如下。

%创建一个数字和轴。
f1 =图;
ax =轴(f1);

将一个特定的颜色映射关联到坐标轴上。
colormap (ax,飞机(64))
通过添加一个颜色条来可视化。
彩色杆(斧头)

%接下来,创建一个新图形配备不同的颜色地图。
f2 = figure('Colormap', summer(64));

将坐标轴移动到新图形上,然后检查颜色映射是否被保留。
AX.Parent = F2;

% 查看:
Isequal(F2.Colormap,Summer(64))
isequal (ax。Colormap喷气(64))

非常感谢,

保罗·奥利里

你好,
谢谢你的这段代码,它给了我需要的东西,让我开始一些良好的编程图表。一个评论:

我做了一张热图作为开始。我使用图像来呈现数字矩阵,并使用颜色地图来设置颜色表示。然而,colormap与Matlab中的图形相关,而不是一个轴。因此,当我改变父窗口时,它会呈现在新图形窗口的颜色映射上。也许将“parent”属性设置为可观察对象会有帮助,所以如果它发生了变化,我可以触发一个“update”。然而,我也有可能错过了一些东西。
谢谢保罗

肯Deeley

嗨,马修,
谢谢你的反馈。计划对该文件交换项进行进一步的更新。我有兴趣和你一起更详细地调查第(1)-(3)项。请给我发电子邮件,地址是< name> dot < name> at mathworks dot com,并简要说明复制步骤。(4)为下一个版本修复。(5)如果我们在某个时候将这个条目作为工具箱释放,那将是一个好主意。
谢谢,

马修

一个雄心勃勃的项目。如果这个“图表”对象能够继续发展下去,我会很高兴。

我有一些小问题:
1.“GUI布局工具箱”的检测(对我来说)不一定有效,即使它已经安装。
2.GalleryLauncher会使图表与与该图表相关联的图像不对齐
3.您真的想用+数据和+练习包污染用户名称空间吗?(?)
4.气缸.MLX.contains a saved error
5.这个项目应该(或可以)有适当的MATLAB工具箱部分:帮助,内容文件等。

MATLAB版本兼容性
创建R2019b
与R2019b及后续版本兼容
平台兼容性
窗户 macOS Linux.
致谢

灵感来自:GUI布局工具箱

社区寻宝

找到Matlab Central中的宝藏,并发现社区如何帮助您!

开始狩猎!