2012-09-13 124 views
0

我想繪製一個二維網格的三角形。我想根據給定的正數標量的數組A爲每個三角形着色,每個三角形使用一個;例如,假設A包含每個三角形的面積,並且我希望大三角形比較小的三角形更粉紅。我知道如何做到這一點:顏色三角形有一些例外

patch('Faces',tri,'Vertices',V,'FaceColor','flat', 
      'FaceVertexCData',A,... 
      'CDataMapping','scaled'); 
colormap(pink); 

不過,我也有另外一個布爾數組B,每個三角形一個布爾值。例如,它標記哪個三角形是等腰三角形。 如果一個三角形在B中標記爲1,我想爲它着黃色。

我認爲這可以通過類似A(B==1)=-1,更改colormap和巧妙設置caxis來實現,但這是最優雅的方式嗎?

回答

0

是否要跳過某些三角形的着色(用一種顏色對它們着色),還是對這些三角形使用不同的顏色表?

對於二維圖,第一種情況相對簡單。您可以將這些三角形中的A設置爲NaN,並且修補程序不會繪製它們。此外,改變劇情的背景顏色將有效地顯示在彩色非繪製三角形你想

A(B)=NaN; 
set(gca,'Color',[1 0 0]); % red 

如果要使用不同的顏色或顏色範圍,你必須要追加的colormaps並設置在A中的值用於各個三角形是「足夠大」比一種用於任何其他的三角形:

cmap = [colormap; [1 0 0]]; % red 
colormap(cmap); 
A(B) = max(A)+1; 

無需與軸線玩。否則,如果你想要包含兩種不同的色階,你必須使用你的色塊圖的CData屬性,參見一個很好的教程here來繪製兩張圖,一張是灰度圖,另一張是同一張圖的顏色。

還有this後有關如何繪製兩個不同的顏色映射兩個不同的數據集。這是通過追加兩個顏色映射來完成的,並確保兩個數據集訪問最終顏色映射的不同部分。

+0

如果'A = [1 2 3 10000]'那麼我不認爲這個技巧會起作用。你建議'A(B)= 10001',但是'10001'和'10000'會映射到相同的顏色 – olamundo

+0

@noam當然,這個例子是在[0,1]範圍內的A。如果確保A(B)設置爲「足夠大」的值,該怎麼辦? – angainor

+0

當然可以這樣做,但這些正是我希望避免的那種技巧。 爲了完整起見,「足夠大」本身並不夠好,如果你採取'A = [1 2 3]'和'足夠大'的加法,A(B)= 100000 ',那麼現在'1','2','3'映射到相同的顏色。找到正確的值並不難,但我希望儘可能避免。 – olamundo