罗兰在MATLAB的艺术

把想法变成MATLAB

请注意

罗兰在MATLAB的艺术已经存档,不会被更新。

Vectorizing图形操作

让我们谈谈今天在一块元素的变化特征。我将用一个例子来自一个映射的工具箱。我的目标是给你们修改图形的好方法。

内容

设置

首先我把示例目录到我的路径可以包含国家边界多边形形状文件。

目录(fullfile (userpath,“例子”,“mapexgeo”))

读美国高分辨率数据

州= shaperead (“usastatehi”,“UseGeoCoords”,真正的);

创建一个SymbolSpec阿拉斯加和夏威夷显示为红色的多边形。

符号= makesymbolspec (“多边形”,{“名字”,“阿拉斯加”,“FaceColor”,“红色”},{“名字”,“夏威夷”,“FaceColor”,“红色”});

创建基本图

创建一个worldmap北美的阿拉斯加和夏威夷为红色,其他所有州蓝色。

图worldmap (北美的)statePatches = geoshow(州,“SymbolSpec”、符号、“DefaultFaceColor”,“蓝”,“DefaultEdgeColor”,“黑”)轴
statePatches =组属性:孩子们:[51×1补丁]可见:在“HitTest:”“使用显示所有属性

改变一个国家的颜色

我们可以改变一个国家使用的颜色容易通过。和一个不同的方式去了解美国。

statePatches.Children (17)。FaceColor =“y”;州(17). name
ans =肯塔基州

改变另一个

我可以改变颜色来定制一个状态。

statePatches.Children (42)。FaceColor =[0.2, 0.8, 0.7]; states(42).Name
ans =田纳西州

一种颜色设置所有州的补丁

现在所有州的颜色改为红色。在这种情况下,我要召集所有的补丁在一起,成一个以逗号分隔左边。我需要确保我有尽可能多的从右边输出,因此使用交易

[statePatches.Children。FaceColor] =交易(“米”);

现在每个状态更改为不同的颜色。让我们先做一个颜色数组。

stateColors1 =兰德(长度(州),3);stateColors2 = fliplr (stateColors1);

每个状态更改为一个不同的颜色——for循环

我们可以用一个循环,这样做当然可以。尽管这是一个相对较小的例子,让我们用时间的乐趣。

抽搐npatch = 1:长度(州)statePatches.Children (npatch)。FaceColor = stateColors1 (npatch:);结束colorTimes = toc;

矢量化的方式我们也可以这样做,它可以提供一个巨大的时间储蓄如果有足够的补丁。在这种情况下,51块,时间并不是一个大问题。我们已经看到客户改善他们的代码的速度非常的场景更加复杂。

我们需要做的不是分别设置每个颜色。相反,我们使用“老式的”功能,利用它提供了向量化。我要做的就是通过一个句柄数组。我也附上属性(或属性)我想调整单元阵列。我供应每个处理的输入匹配单元阵列的元素。这就要求我把三胞胎RGB进入细胞。我可以做很容易num2cell

每个状态更改为一个不同的颜色——集

我们开始吧。

抽搐(statePatches设置。孩子,{“FaceColor”},num2cell (flipud (stateColors2), 2));colorTimes (2) = toc
colorTimes = 0.052154 - 0.026216

结论

有时向量化图形没有发生重大努力。喜欢改变每一个补丁一个颜色。使用与更新的图形符号引入系统是容易的,代码是高度可读的。

有时出于性能,可能会有例子vectorizing仍然是合适的,你不能把它与新符号。在这种情况下,您将需要使用的各种技术和功能我这篇文章。这对你有帮助吗?请分享你的想法在这里




发表与MATLAB®R2016b


  • 打印
  • 发送电子邮件

评论

要发表评论,请点击此处登录到您的MathWorks帐户或创建一个新帐户。