我想知道是否有一种简单的方法可以使用patch命令更改Voronoi图的颜色。事实上,似乎必须有一个相对简单的方法,因为我使用set命令来改变颜色条的限制,这样我可以在绘制不同的Voronoi图时标准化颜色。
for i = 1:length(p)
if all(p{i}~=1) % If at least one of the indices is 1,
% then it is an open region and we can't
% patch that.
patch(v(p{i},1),v(p{i},2),log10(Color(i)))**; % use color i.
set(gca, 'CLim', [0 7]);
colorbar
end
end
patch命令用于从voronoin命令获取输出信息,然后为凸多边形创建面。重要的部分是这些补丁的着色。正如您所看到的那样,这是我传递给patch命令的第三个输入参数,并且是一个mx1值向量。
我的问题是,是否可以使用补丁来创建那些初始颜色映射到这些多边形的多边形,然后能够使用set命令(或类似的东西)来输入另一个mx1颜色矢量来改变使用初始着色的原始映射,同时显示所有这些多边形的颜色。
我以前的方式是非常圆的方法,而且非常耗时。因为每种颜色必须与其特定的多边形相对应,所以每次我想要一种新颜色时我都必须重新创建所有多边形。我希望在创建多边形后,使用新的颜色矢量更容易地改变颜色。
如果有任何我可以做的事情让我更清楚,请告诉我,谢谢!
答案 0 :(得分:1)
我不完全确定这是否是您所要求的,但可能是:
% Is this how you generate your Voronoi diagram?
x = gallery('uniformdata',[1 10],0);
y = gallery('uniformdata',[1 10],1);
dt = DelaunayTri(x(:),y(:));
v = voronoiDiagram(dt);
% Original colors of your Voronoi patches (mx3 matrix)
origColors = rand(numel(p), 3);
% To store handles to the generated patches
pHandle = nan(1, numel(p));
for i = 1:numel(p)
if all(p{i}~=1)
pHandle(i) = patch(v(p{i},1), v(p{i},2), colors(i));
end
end
set(gca, 'CLim', [0 7]);
% New colors for the patches (mx3 matrix)
newColors = rand(numel(p), 3);
% Recolor the closed regions
closedIdx = find(~isnan(patchHandle));
arrayfun(@(i) set(pHandle(i), 'FaceColor', colors(i,:)), closedIdx);
set(gca, 'CLim', [0 7]);
答案 1 :(得分:1)
x = [3 6 9 1 2 10 2 2 5 8]';
y = [5 10 15 3 5 12 5 8 10 7]';
[v,p] = voronoin([x,y]);
% Original colors of your Voronoi patches (mx3 matrix)
colors = [10 9 NaN NaN 2 NaN NaN 1 NaN NaN]';
% To store handles to the generated patches
pHandle = nan(1, numel(p));
for i = 1:numel(p)
if all(p{i}~=1)
pHandle(i) = patch(v(p{i},1), v(p{i},2), colors(i));
end
end
colorbar
% New colors for the patches (mx3 matrix)
colors = [1 2 NaN NaN 9 NaN NaN 10 NaN NaN]';
% Recolor the closed regions
closedIdx = find(~isnan(pHandle));
arrayfun(@(i) set(pHandle(i), 'FaceColor','flat','FaceVertexCData',colors(i,:),'CDataMapping','scaled'),closedIdx);
我不得不使用NaN的补丁进入无限远并且没有界限,所以那些有界的,我可以给它们着色。谢谢您的帮助!