【问题标题】:color triangles with exceptions to some有一些例外的彩色三角形
【发布时间】:2012-09-13 22:04:43
【问题描述】:

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

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

但是,我还有另一个布尔数组 B,每个三角形一个布尔值。例如,它标记了哪些三角形是等腰三角形。 如果一个三角形在B 中被标记为1,我想把它染成黄色。

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

【问题讨论】:

    标签: matlab plot geometry color-mapping


    【解决方案1】:

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

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

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

    如果您想使用不同的颜色或颜色范围,您必须附加颜色图并将 A 中的值设置为相应三角形的值比任何其他三角形的 A“足够大”:

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

    无需玩轴。

    否则,如果您想包含两个不同的色标,则必须使用补丁图的 CData 属性,请参阅一个很好的教程 here 以在同一个图上绘制两个图,一个是灰度图,一个是彩色图.

    还有this 帖子关于如何使用两个不同的颜色图绘制两个不同的数据集。这是通过附加两个颜色图并确保两个数据集访问最终颜色图的不同部分来完成的。

    【讨论】:

    • 如果A=[1 2 3 10000] 那么我认为这个技巧不会奏效。您建议A(B)=10001,但1000110000 将映射到相同的颜色
    • @noam 当然,该示例适用于 [0,1] 范围内的 A。如果您确保将 A(B) 设置为“足够大”的值怎么办?
    • 当然可以这样做,但这些正是我希望避免的技巧。只是为了完整起见,“足够大”本身还不够好,因为如果你拿A=[1 2 3]和一个“足够大”的补充,A(B)=100000,那么现在是123 映射到相同的颜色。找到正确的值并不难,但如果可能的话,我想避免它。
    • @noam 然后你可以使用第一种方法,改变剧情背景。请参阅编辑后的答案。
    • 谢谢,这是一个不错的技巧,但它会为整个 BG 着色,不是吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    相关资源
    最近更新 更多