1

パッチ コマンドを使用してボロノイ図の色を簡単に変更する方法があるかどうか疑問に思っています。実際、 set コマンドを使用してカラーバーの制限を変更し、さまざまなボロノイ図をプロットするときに色を標準化できるため、比較的簡単な方法があるはずです。

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 コマンドに渡す 3 番目の入力引数で、値の mx1 ベクトルです。

私の質問は、パッチを使用して、それらのポリゴンにマッピングされた初期色でこれらのポリゴンを作成し、set コマンド (または同様のもの) を使用して別の mx1 色のベクトルをフィードして色を変更できるかどうかです。最初のカラーリングの元のマッピングを使用して、これらすべてのポリゴンを一度に。

私が以前に行った方法は、非常に回りくどい方法であり、非常に時間がかかります。各色は特定のポリゴンに対応する必要があるため、新しい色が必要になるたびにすべてのポリゴンを再作成する必要がありました。ポリゴンが作成された後、新しい色ベクトルで色を変更するはるかに簡単な方法があることを願っています。

これをより明確にするために私にできることがあれば教えてください、ありがとう!

4

2 に答える 2

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 を使用する必要があったため、境界のあるパッチに色を付けることができます。助けてくれてありがとう!

于 2012-10-28T01:21:29.950 に答える
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]);
于 2012-10-27T10:07:36.177 に答える