Vectorizing图形操作
让我们谈谈今天在一块元素的变化特征。我将用一个例子来自一个映射的工具箱。我的目标是给你们修改图形的好方法。
内容
设置
首先我把示例目录到我的路径可以包含国家边界多边形形状文件。
目录(fullfile (userpath,“例子”,“mapexgeo”))
读美国高分辨率数据
州= shaperead (“usastatehi”,“UseGeoCoords”,真正的);
创建一个SymbolSpec阿拉斯加和夏威夷显示为红色的多边形。
符号= makesymbolspec (“多边形”,…{“名字”,“阿拉斯加”,“FaceColor”,“红色”},…{“名字”,“夏威夷”,“FaceColor”,“红色”});
创建基本图
创建一个worldmap北美的阿拉斯加和夏威夷为红色,其他所有州蓝色。
图worldmap (北美的)statePatches = geoshow(州,“SymbolSpec”、符号、…“DefaultFaceColor”,“蓝”,“DefaultEdgeColor”,“黑”)轴从
statePatches =组属性:孩子们:[51×1补丁]可见:在“HitTest:”“使用显示所有属性
![](http://www.tatmou.com/blogs/images/loren/2017/vecHG2_01.png)
改变一个国家的颜色
我们可以改变一个国家使用的颜色容易通过。和一个不同的方式去了解美国。
statePatches.Children (17)。FaceColor =“y”;州(17). name
ans =肯塔基州
![](http://www.tatmou.com/blogs/images/loren/2017/vecHG2_02.png)
改变另一个
我可以改变颜色来定制一个状态。
statePatches.Children (42)。FaceColor =[0.2, 0.8, 0.7]; states(42).Name
ans =田纳西州
![](http://www.tatmou.com/blogs/images/loren/2017/vecHG2_03.png)
一种颜色设置所有州的补丁
现在所有州的颜色改为红色。在这种情况下,我要召集所有的补丁在一起,成一个以逗号分隔左边。我需要确保我有尽可能多的从右边输出,因此使用交易。
[statePatches.Children。FaceColor] =交易(“米”);
![](http://www.tatmou.com/blogs/images/loren/2017/vecHG2_04.png)
现在每个状态更改为不同的颜色。让我们先做一个颜色数组。
stateColors1 =兰德(长度(州),3);stateColors2 = fliplr (stateColors1);
每个状态更改为一个不同的颜色——for循环
我们可以用一个循环,这样做当然可以。尽管这是一个相对较小的例子,让我们用时间的乐趣。
抽搐为npatch = 1:长度(州)statePatches.Children (npatch)。FaceColor = stateColors1 (npatch:);结束colorTimes = toc;
![](http://www.tatmou.com/blogs/images/loren/2017/vecHG2_05.png)
矢量化的方式我们也可以这样做,它可以提供一个巨大的时间储蓄如果有足够的补丁。在这种情况下,51块,时间并不是一个大问题。我们已经看到客户改善他们的代码的速度非常的场景更加复杂。
我们需要做的不是分别设置每个颜色。相反,我们使用“老式的”功能集,利用它提供了向量化。我要做的就是通过一个句柄数组。我也附上属性(或属性)我想调整单元阵列。我供应每个处理的输入匹配单元阵列的元素。这就要求我把三胞胎RGB进入细胞。我可以做很容易num2cell。
每个状态更改为一个不同的颜色——集
我们开始吧。
抽搐(statePatches设置。孩子,{“FaceColor”},num2cell (flipud (stateColors2), 2));colorTimes (2) = toc
colorTimes = 0.052154 - 0.026216
![](http://www.tatmou.com/blogs/images/loren/2017/vecHG2_06.png)
结论
有时向量化图形没有发生重大努力。喜欢改变每一个补丁一个颜色。使用与更新的图形符号引入系统是容易的,代码是高度可读的。
有时出于性能,可能会有例子vectorizing仍然是合适的,你不能把它与新符号。在这种情况下,您将需要使用的各种技术和功能我这篇文章。这对你有帮助吗?请分享你的想法在这里。
コメント
コメントを残すには,ここをクリックしてMathWorksアカウントにサインインするか新しいMathWorksアカウントを作成します。