【问题标题】:how to get vertical gradient fill in matlab plot如何在matlab图中获得垂直渐变填充
【发布时间】:2013-02-18 00:16:01
【问题描述】:

我有一个要绘制的函数 y=x^2,我想用沿 y 方向从黑色到红色的渐变色填充这条曲线所界定的区域。我在网上找到了颜色

x = linspace(-3, 3, 20)';
f = x.^2;
M = f.^2;

N = length(x);
verts = [x(:), f(:)-max(f); x(:) zeros(N,1)];

q = (1:N-1)';
faces = [q, q+1, q+N+1, q+N];
p = patch('Faces', faces, 'Vertices', verts, 'FaceVertexCData', [M(:); M(:)], 'FaceColor', 'interp', 'EdgeColor', 'none')

这段代码向我展示了与曲线绑定到 x 轴的区域,例如

但我要填充的是白色区域。所以我修改代码如下

x = linspace(-3, 3, 20)';
f = x.^2;
M = f.^2;

N = length(x);
verts = [x(:), f(:)-max(f); x(:) zeros(N,1)];

q = (1:N-1)';
faces = [q, q+1, q+N+1, q+N];
p = patch('Faces', faces, 'Vertices', verts, 'FaceVertexCData', [M(:); M(:)], 'FaceColor', 'interp', 'EdgeColor', 'none')

这给了我类似以下的东西

它填补了正确的区域,但有两个问题:

  1. 整个图像向负 y 轴移动了 9 个单位
  2. 渐变颜色是从左到右填充,但我希望它从下到上(垂直)填充
  3. 颜色图未定义为黑色到红色(不过我可以手动更改)

【问题讨论】:

    标签: matlab gradient patch


    【解决方案1】:

    因为直线而发生垂直偏移

    verts = [x(:), f(:)-max(f); x(:) zeros(N,1)];
    

    其中 f(:) - max(f) 始终为 f(:) 来解决这个问题。

    至于阴影的方向,由于您将补丁定义为垂直条,因此它们将被着色为垂直条。如果你想要水平着色,你需要定义水平面片。你能弄清楚吗,或者你需要帮助吗?

    编辑 - 此代码符合您的要求:

    figure;
    x=linspace(-3, 3, 200);
    f = x.^2;
    plot(x, f, 'r'); hold on % you could leave this line out... then there is no curve
    N = numel(x);
    for ii = ceil(N/2):N-1
        ix = [ii ii+1 N-ii N-ii+1];
        disp(ix)
        patch(x(ix), f(ix), f(ii)*256/max(f(:)),'edgecolor', 'none');
    end
    

    这是输出:

    还有一个问题 - 您将颜色 M 定义为 f.^2 - 这不是一轮平方太多吗?我认为您的意思是 x.^2(或只是 F)?

    【讨论】:

      【解决方案2】:

      有一种可能更简单的方法来实现几乎同样的事情...画图如下:

      cplot = repmat(1:256, [256 1])';    % create a 256 square horizontal gradient
      xv = linspace(-3, 3, 256);          % range of x values
      yv = linspace(0, 9, 256);           % range of y values
      cplot(repmat(xv.^2, [256 1])>repmat(yv', [1 256]))=255; % set area below the curve to white
      figure
      imagesc(xv, yv, cplot);
      

      现在您所要做的就是修复色标...您将希望颜色 255 为白色...

      【讨论】:

        猜你喜欢
        • 2016-12-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-10
        • 1970-01-01
        • 1970-01-01
        • 2020-08-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多