罗兰对MATLAB的艺术

将想法转化为MATLAB

MATLAB R2014b图形-第3部分:新图形系统中的兼容性考虑

今天,大卫·加里森我们的客座博主将继续他关于R2014b中的新图形系统的系列文章。

  • 第1部分:新图形系统的特点
  • 第2部分:使用图形对象
  • 第3部分:新图形系统中的兼容性考虑

这是本系列的第3部分。

内容

到目前为止我们学到了什么?

第1部分在本系列中,我介绍了R2014b中的新MATLAB图形系统,并描述了一些新功能。在第2部分我谈到了R2014b的一个重大变化——图形函数返回MATLAB对象,而不是数字句柄.在这篇文章中,我将讨论使用R2014b图形时的兼容性考虑。

这篇文章比我之前的两篇文章要长。在第一部分中,我将讨论我们在R2014b图形中所做的更改,为什么我们做出这些更改,它们如何影响您,以及在哪里可以获得更多信息。第二部分描述了新图形系统中的视觉变化,包括新的颜色图、绘图中的新线条颜色以及绘图标题和轴标签的新大小,这些变化会影响到每个人。最后一节是关于我们所做的影响高级图形用户和用户界面构建者的更改。你们中的大多数人可以跳过最后一部分中更高级的内容。

第1节:R2014b图形的兼容性注意事项

当我们谈论兼容性考虑时,我们谈论的是R2014b中可能与R2014b之前编写的代码不兼容的更改。这些不兼容可以通过以下三种方式之一影响代码。

  1. 影响情节外观的视觉变化
  2. 影响代码行为的更改
  3. 导致错误的更改,需要您修改代码

我们为什么要做这些改变?

首先,让我说,在MathWorks,我们非常重视兼容性。我们有一个严格的过程来审查MATLAB中可能影响现有MATLAB代码的潜在变化。我们对它们进行了非常彻底的评估,以确定它们的影响程度。我们在发布说明中记录了这些变化,并尽可能提供替代方案。为了让我们继续开发MATLAB,这些更改是必要的。

我们新图形系统的目标之一是引入一种新的架构,使我们能够为未来构建新的图形功能。我们不能继续使用旧的图像架构,因为它太局限了。新架构还使我们能够修复多年来积累的大量突出的图形错误。

我们的第二个目标是支持现有的图形功能,并尽量减金宝app少对MATLAB用户的干扰。我们通过评估每一个可能在图形系统中引入不兼容性的更改来做到这一点。我们用超过100,000个MATLAB文件在内部测试了这些变化,并亲自与大量高级图形用户一起确定了以下内容:

  • 特定的不兼容性影响用户代码的频率是多少?
  • 哪些用户会受到影响?
  • 确定特定不相容的影响有多难?
  • 如果必须更改代码,需要做多少工作?

所有这些测试的结果允许我们做两件事。首先,它允许在发布之前对新的图形系统进行更改,以尽量减少某些不兼容的影响。其次,它告诉我们需要什么样的文档和工具来帮助人们完成转换。

这些变化对我有什么影响?

任何使用图形的人都会注意到R2014b的视觉差异。看过R2014b的人告诉我们,新的视觉外观比以前版本的MATLAB有了很大的改进。差异包括对颜色映射、线条颜色、字体大小、网格和其他视觉属性的更改。对大多数人来说就是这样。这就是你所需要知道的。

那些从事高级图形编程和构建用户界面的人可能会受到需要更改代码的不兼容性的影响。我将在这篇文章的最后一部分讨论最常见的几种。我们还提供了大量文档和一些工具来帮助您完成转换。

我如何了解更多关于R2014b图形的变化?

为了准备新图形系统的发布,我们制作了大量的材料来帮助人们理解这些变化,并对他们的代码进行任何修改。以下是关于R2014b图形信息的资源列表:

第二部分:视觉差异

任何在R2014b中使用MATLAB图形的人都会看到情节看起来非常不同。在本节中,我将向您展示一些较大的视觉差异。当我们通过这些示例时,我认为您会同意R2014b中的更改比以前的MATLAB版本有很大的改进。当然,有时您可能需要更改其中一些视觉属性。我会告诉你怎么做,或者我会提供一个链接到文档以获取更多信息。

新的默认颜色贴图

在MATLAB中,colormap是一个RGB颜色值矩阵,用于设置图像和表面的颜色。例如,当您调用冲浪函数,你得到一个图,其中表面颜色与图的高度成正比。颜色基于来自颜色映射的值。

在R2014b中,我们引入了一个新的颜色映射,叫做parula这是现在的默认值。在以前的MATLAB版本中,默认的颜色图为飞机.这是R2014a和R2014b的颜色对比图。

我们改变了默认的颜色贴图来解决彩虹颜色贴图的问题飞机.新parula色图从暗到亮排序,在感知上是一致的。有关彩虹色图问题的更多信息,如飞机,请参阅Steve Eddins博客上的文章MATLAB的新颜色映射-第2部分-彩虹的麻烦.你可以使用colormap函数将颜色映射更改为您想要的任何颜色。例如,要将颜色映射更改为飞机创建情节后使用以下命令。

colormap(飞机)

图中的线条颜色

我们还更改了用于绘图的线条颜色。选择这些线条颜色是为了使线条更容易区分,并帮助患有某些类型色盲的人。

控件控制绘图中使用的线条颜色ColorOrder的性质对象。关于图中线条颜色的另一个注意事项。在R2014b中,当plot被调用时抓住, MATLAB将使用下一个颜色在颜色顺序上进行每次调用情节.这样就得到了不同线条颜色的图。在以前的版本中,每次对plot的调用都将按照颜色顺序重新开始,以便每行都是相同的颜色。

有关在ColorOrder中控制颜色的信息,请参阅文档部分为什么故事情节的颜色不同?

图的标题和标签

最后一个关于情节外观的改变。在R2014b中,绘图标题和轴标签使用比以前版本的MATLAB更大的字体大小,并且绘图标题默认为粗体。

我故意用了一个很长的标题来说明这一点。在这种情况下,标题太长,超出了轴的边界。控件控制绘图标题和轴标签TitleFontWeightTitleFontSizeMultiplier,LabelFontSizeMultiplier属性。有关更多信息,请参见如何使图形标题变小?

这涵盖了R2014b中情节的主要视觉变化。下一节将介绍仅影响高级图形用户和GUI构建器的更改。

你们中的大多数人可以在这里停止阅读,继续你一天的剩余时间。

第3节:影响高级图形用户的更改

如果你还在阅读,我假设你在MATLAB中做过一些高级图形编程,或者你可能构建过MATLAB用户界面。在本节中,我将介绍您可能遇到的R2014b图形中最常见的四种非视觉更改。如果您确实遇到了其中一种情况,您可能必须对代码进行更改。

图形函数返回对象,而不是数字句柄

我在第2部分这个系列的。图形函数现在返回对象,而不是数字句柄。R2014b文档中有关于这个主题的详细信息图形句柄现在是对象,而不是double.我将给出几个简单的示例来说明在R2014b之前编写的代码会发生什么。

在R2014b之前,您可以在数组中存储一组图形对象的句柄,然后向该数组添加一些数字数据。在R2014b中,这将导致错误。

X = -pi:0.1:pi;y = sin(x);Y2 = cosx;myLines = plot(x,y1,x,y2)% plot返回一个包含两个Line对象的数组

如果你试着设置myLines(3) = 1.2,将得到以下错误。

无法将双精度值1.2转换为句柄

MATLAB不允许您向图形对象数组中添加数值。如果您尝试在MATLAB期望数值的函数中使用对象句柄,则会出现类似的问题。的一个简单例子sprintf函数。

A = sprintf;“你点击了数字%d\n”gcf);

% d的规格sprintf格式字符串需要一个整数值。然而,由于gcf是一个数字对象,则会得到以下错误。

未为'matlab.ui '定义sprintf函数时出现错误。图的输入。

这里是最后一个例子。因为图形句柄过去是数字,所以可以在逻辑表达式中使用它们。

如果(get (0,“CurrentFigure”) disp ([“图”get (gcf,“名字”)))%显示GCF的图形名称其他的disp (“没有公开数字”%没有开放数字结束

这在早期版本的MATLAB中有效,因为get (0, ' CurrentFigure ')将返回空数组或数字数字句柄。的逻辑测试中,这两个值都是有效的如果上面的语句。在R2014b中,这将导致错误。

无法从matlab.ui.Figure转换为逻辑。

在某些情况下,我们试图保持与以前版本的兼容性。例如,您仍然可以使用0在函数中引用图形根得到.但是,作为最佳实践,我们现在建议使用大的函数获取图形根。类似地,我们仍然支持在以下函数中使用文字金宝app整数值来引用数字得到,数字.同样,最佳实践是在使用这些函数时使用包含对象的变量。

方法将对象句柄强制转换为数字句柄是可能的函数。方法将该数字强制转换回对象句柄处理函数。我们不建议将此作为长期解决方案。请注意,我们可能会选择在MATLAB的未来版本中删除此功能。如果有的话,我们会提前通知你的。

颜色条和图例不再是轴

在早期版本的MATLAB中,传说colorbar函数创建的对象类型为'axes'。从技术上讲,图例和色条是轴的子类。在R2014b中传说函数创建一个Legend对象和colorbar函数创建一个ColorBar对象。

这意味着什么呢?首先,R2014b中findobj调用的结果可能与以前的版本不同。在R2014b中,命令

findobj (“类型”“轴”

不会返回任何图例或颜色条对象。要获取这些对象,您需要执行以下操作:

findobj (“类型”“传奇”) findobj (“类型”“ColorBar”

其次,图例和色条不能成为当前轴。在R2014b之前,您可以编写如下代码:

图(1:10)cb = colorbar;轴(cb)使颜色条为当前轴标题(“我的Colorbar”设置颜色栏的标题

如果您尝试在R2014b中运行此代码,您将看到一个错误。

ColorBar类型的句柄不能制作当前轴

在R2014b中,您仍然可以使用标题函数。给它colorbar句柄作为第一个参数。

标题(cb,“我的Colorbar”

或者你可以使用colorbar标签属性获取标签的文本对象并设置其字符串属性。

cb.Label.String =“我的Colorbar”

某些图表返回的对象发生了变化

图表功能酒吧轮廓阀杆其他返回一个或多个图形对象。在以前的MATLAB版本中,这些对象的名称是barseriescontourgroup,stemseries.这些对象都是一种特殊类型的对象,称为anhggroup.每个hgroup对象都有一组子对象。这些孩子是线条或斑块之类的低级物体。这是一个来自R2014a的例子。

[~,h] =轮廓(峰)“LineLevels”, -6:1:8);get (h,“类型”轮廓函数返回一个hggroup对象
ans =
hggroup
Ch = get(h)“孩子”);get (ch (1),“类型”hg组的子对象是补丁对象
ans =
补丁

在R2014b之前轮廓命令返回一个hggroup对象,其子对象是patch对象(每个等高线对应一个)。使用补丁对象,然后可以用等高线做有趣的事情。例如,您可以将偶数编号的等高线设为实线,并将奇数编号的等高线设为虚线,如下所示。

正如您可能已经猜到的那样,R2014b中的情况有所不同。首先,这些函数返回的对象类型是不同的。例如,酒吧函数返回酒吧对象和轮廓函数返回轮廓对象。其次,这些函数返回的对象不再有任何子对象。这意味着你不能接触到底层对象。

那么你会怎么做呢?你必须采取不同的方法。在下面的代码中,我创建了两个轮廓——一个是实线,一个是虚线。这段代码将创建一个类似于上面所示的图。它在R2014b中工作在以前版本的MATLAB中。

Major = -6:2:8;次要= -5:2:7;[~,hmajor] =轮廓(峰)“LevelList”、专业);具有偶数水平的%轮廓
持有[~,hminor] =轮廓(峰)“LevelList”、小);具有奇数水平的%轮廓集(hminor,“线型”“:”%将奇数级别用点分隔持有

UI控件可能不会出现在GUI中

我想说的最后一个变化是。它可以影响R2014b之前创建的MATLAB gui。假设我有一个带有面板和按钮的简单GUI。我可能有这样的代码:

图(“NumberTitle”“关闭”“名字”版本(“发布”),“位置”, [100 100 350 260],菜单条的“没有”“工具栏”“没有”);按钮= uicontrol(“风格”“按钮”“字符串”“我的按钮”“单位”“归一化”“位置”, [0.4 0.5 0.25 0.15]);面板= uipanel(“位置”, [0.10 0.10 0.8 0.8],“标题”“我的UIPanel”);

看起来还行吧?这是它在R2014a和R2014b中的样子。

那么这里发生了什么?我没有看到我的按钮在R2014b。它去哪儿了?事实证明,按钮仍然存在,但在R2014b它是在面板下绘制。

在以前的MATLAB版本中,ui控件总是绘制在ui面板的顶部,而不管它们创建的顺序如何。在R2014b中,这两个组件是按创建顺序绘制的。由于面板是在按钮之后创建的,因此它被绘制在顶部。我真正想要的是让按钮成为面板的子按钮。为了做到这一点,我可以改变我的代码看起来像这样:

图(“NumberTitle”“关闭”“名字”版本(“发布”),“位置”, [100 100 350 260],菜单条的“没有”“工具栏”“没有”);面板= uipanel(“位置”, [0.10 0.10 0.8 0.8],“标题”“我的UIPanel”);按钮= uicontrol(“父”面板,“风格”“按钮”“字符串”“我的按钮”“单位”“归一化”“位置”, [0.4 0.5 0.25 0.15]);

您也可以在GUIDE中通过将按钮移出面板然后将其移回来解决此问题。这将自动使按钮成为面板的子按钮。

您可以通过下载工具来检查现有的gui转换到R2014b图形的工具.有关更多信息,请参见为什么有些组件缺失或部分模糊?

你现在做什么?

阅读我上面列出的材料,了解更多关于R2014b中图形的变化以及它们如何影响您的MATLAB代码。下载这些工具并在您的代码和gui上运行它们。如果您无法找到解决R2014b中某个更改所需的信息,请联系我们的技术支持团队金宝app.他们非常熟悉R2014b中的变化,可以帮助您找到解决方案。

你遇到过不兼容的问题吗?

你在R2014b中遇到过这些变化吗?你找到你需要的信息了吗?您是否能够使用这些信息对代码进行必要的更改?你试过过渡工具吗?我们很想听听你的想法在这里

结论

我希望这一系列的文章能让你对R2014b图形系统有一个很好的介绍。在这个版本中有很多新的东西需要消化。试试这些东西,让我知道你的想法。

谢谢洛伦过去几周让我住她的房间。




使用MATLAB®R2014b发布

|
  • 打印
  • 发送电子邮件

评论

如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。