【问题标题】:How can I fill patch objects using a colormap instead of a solid color?如何使用颜色图而不是纯色填充补丁对象?
【发布时间】:2011-09-08 16:59:28
【问题描述】:

我需要像这张图片一样创建一个情节:

我写了这段代码:

close all

x = [NaN 1 3 7 9 23 8];
y = [NaN 2 6 7 8 2 1];
z = [NaN 1 4 5 5 4 1];

for n = 1:length(z)-1
    x1 = x(n);
    x2 = x(n+1);
    y1 = y(n);
    y2 = y(n+1);
    z1 = z(n);
    z2 = z(n+1);
    p = patch([x1 x2 x2 x1], [y1 y2 y2 y1], [0 0 z2 z1], [0 1 1]);
    set(p, 'LineStyle', 'none');
    plot3([x1 x2], [y1 y2], [z1 z2], 'b-', 'linewidth', 3);
    hold on
end

view(3);
light

我明白了:

这没关系,但每个补丁面都有一个纯色,我希望有一个基于 Z 值的颜色渐变,就像在第一张图像中,最低 z 值是天蓝色,最高 z 值是白色(从最低到最高的梯度)。

如何修改我的脚本以获得这种效果?

【问题讨论】:

    标签: matlab plot colormap


    【解决方案1】:

    define your patches 有多种方式,color them as well 有多种方式。这是一种无需 for 循环即可创建坐标数据的方法,只需调用函数 patch 即可绘制和着色补丁:

    x = [NaN 1 3 7 9 23 8];  %# Sample x data
    y = [NaN 2 6 7 8 2 1];   %# Sample y data
    z = [NaN 1 4 5 5 4 1];   %# Sample z data
    
    N = numel(x);                        %# The number of sample data points
    X = [x; x([1 1],[N 1:N-1]); x];      %# X coordinates (one patch per column)
    Y = [y; y([1 1],[N 1:N-1]); y];      %# Y coordinates (one patch per column)
    Z = [z; z([N 1:N-1]); zeros(2,N)];   %# Z coordinates (one patch per column)
    C = round(63.*Z./max(Z(:)))+1;       %# Color map index
    map = [linspace(0,1,64).' ...       %'# Color map (64 values spanning from
           ones(64,2)];                  %#   white to cyan)
    
    figure();                               %# Open a new figure
    patch(X,Y,Z,C,'FaceColor','interp',...  %# Plot the patches
          'EdgeColor','none');
    colormap(map);                          %# Update color map
    hold on;                                %# Add to the plot
    line(X(1:2,:),Y(1:2,:),Z(1:2,:),...     %# Plot the line
         'Color','b','LineWidth',2);
    view(3);                                %# Change the view
    

    这将为您提供以下图,在最高值处为白色,在最低值处逐渐变为青色:

    索引颜色映射的解释...

    上面的变量 map 是一个 64×3 矩阵,其值介于 0 和 1 之间。每一行代表一个 RGB triplet,因此定义了一个唯一的颜色,从第 1 行的青色到第 64 行的白色。这用作图形颜色图。 C 中的人脸颜色数据是此颜色图中的一组行索引,Z 中的每个值对应一个。 Z 中的最小值映射到索引 1(颜色图中的青色),而最大值映射到索引 64(颜色图中的白色)。

    【讨论】:

    • 你能解释一下 C 语言中的颜色索引是什么,它的用途是什么?谢谢
    • @affhendrawan:我在答案中添加了解释。希望有帮助!
    猜你喜欢
    • 2013-01-12
    • 2020-12-12
    • 1970-01-01
    • 2015-03-02
    • 2013-07-01
    • 2010-12-15
    • 1970-01-01
    • 2011-03-17
    • 2018-01-03
    相关资源
    最近更新 更多