Matlab 彩色三角形,有些例外

Matlab 彩色三角形,有些例外,matlab,plot,geometry,color-mapping,Matlab,Plot,Geometry,Color Mapping,我正在尝试绘制三角形的二维网格。我想根据一个给定的正标量数组给每个三角形上色,每个三角形一个;例如,假设A包含每个三角形的面积,我希望大三角形比小三角形更细。我知道怎么做: patch('Faces',tri,'Vertices',V,'FaceColor','flat', 'FaceVertexCData',A,... 'CDataMapping','scaled'); colormap(pink); 但是,我还有另一个布尔数组B,每个三角形一

我正在尝试绘制三角形的二维网格。我想根据一个给定的正标量数组给每个三角形上色,每个三角形一个;例如,假设
A
包含每个三角形的面积,我希望大三角形比小三角形更细。我知道怎么做:

patch('Faces',tri,'Vertices',V,'FaceColor','flat',
            'FaceVertexCData',A,...
            'CDataMapping','scaled');
colormap(pink);
但是,我还有另一个布尔数组
B
,每个三角形一个布尔值。例如,它标记哪些三角形是等腰三角形。 如果三角形在
B
中标记为
1
,我想将其涂成黄色


我假设这可以通过像
A(B==1)=-1
、更改
colormap
caxis
的巧妙设置来实现,但这是最优雅的方式吗?

您想跳过一些三角形的着色(用一种颜色着色),还是对这些三角形使用不同的颜色贴图

第一种情况对于2D绘图来说相对简单。可以将这些三角形中的A设置为NaN,面片将不会绘制它们。此外,更改绘图的背景色将有效地以所需的颜色显示未绘制的三角形

A(B)=NaN;
set(gca,'Color',[1 0 0]); % red
如果要使用不同的颜色或颜色范围,则必须附加颜色贴图,并将a中相应三角形的值设置为比任何其他三角形的值“足够大”:

cmap = [colormap; [1 0 0]]; % red
colormap(cmap);
A(B) = max(A)+1;
不需要玩axis

否则,如果要包括两种不同的颜色比例,则必须使用面片图的CData属性,请参阅有关在同一图形上绘制两个图(一个为灰度图,一个为彩色图)的良好教程


还有一篇关于如何用两种不同的颜色映射绘制两个不同的数据集的帖子。它是通过附加两个颜色映射并确保两个数据集访问最终颜色映射的不同部分来完成的。

如果
A=[1 2 3 10000]
那么我认为这个技巧不起作用。您建议
A(B)=10001
,但
10001
10000
将映射到相同的值color@noam当然,该示例适用于[0,1]范围内的A。如果确保A(B)设置为“足够大”的值会怎么样?当然可以这样做,但这些正是我希望避免的技巧。仅仅为了完整,“足够大”本身是不够好的,因为如果你把
A=[1 2 3]
和一个“足够大”的加法,
A(B)=100000
,那么现在
1
2
3
映射到相同的颜色。要找到正确的值并不难,但如果可能的话,我希望避免这种情况。@noam然后您可以使用第一种方法并更改绘图背景。查看编辑后的答案。谢谢,这是一个很好的技巧,但它会给整个背景着色,不是吗?