代码之家  ›  专栏  ›  技术社区  ›  Rook

为曲线所包围的区域着色

  •  6
  • Rook  · 技术社区  · 15 年前

    例如,在曲线y=x^2的下方,对plot()中的某个区域进行轻微着色(或图案填充;或其他设置不同于其他设置的方法)最简单的方法是什么?

    x = 0:pi/10:2*pi;  
    y = x.^2.;
    plot(x,y);
    
    3 回复  |  直到 12 年前
        1
  •  11
  •   Doresoom    15 年前

    area(x,y) 应该有技巧。不过,我不确定该类是否具有facealpha属性。

    编辑: 不幸的是,区域类没有facealpha属性。但是你可以解决这个问题,直接编辑补丁:

    x=0:pi/10:2*pi;
    y=x.^2;
    H=area(x,y);
    h=get(H,'children');
    set(h,'FaceAlpha',0.5); %#Tada!
    

    编辑2: 要对曲线上方的区域进行着色,可以使用带白色填充的第二个面积图。这是一种蹩脚的拼凑,但应该奏效。重新开始:

    x=0:pi/10:2*pi;
    y=x.^2;
    y2=max(y)*ones(size(y));
    hold on
    H1=area(x,y2);
    H2=area(x,y);
    set(H2,'FaceColor',[1 1 1]);
    axis tight
    

    或者基于Jason的解决方案,使用baseval输入在曲线上方进行着色:

    x=0:pi/10:2*pi;
    y=x.^2;
    baseval=max(y);
    H=area(x,y,baseval);
    h=get(H,'children');
    set(h,'FaceAlpha',0.5,'FaceColor',[0 1 0]);
    axis tight
    
        2
  •  5
  •   Jason S    15 年前

    一个补充的例子来详细说明多雷索姆的职位:

    x=0:pi/50:2*pi;
    y1=x.^2;
    y2=10+5*sin(3*x);
    baseval1=20;
    baseval2=3;
    clf;
    hold on;
    H1=area(x,y1,baseval1);
    H2=area(x,y2,baseval2);
    hold off;
    h=get(H1,'children');
    set(h,'FaceAlpha',0.5,'FaceColor',[1 0.5 0]);
      % set color to orange, alpha to 0.5
    h=get(H2,'children');
    set(h,'FaceAlpha',0.5,'FaceColor',[0.85 1 0.25]);
      % set color to yellow-green, alpha to 0.5
    

    但是你在哪里设置颜色呢?

    h是修补程序(填充区域)的句柄;如果键入get(h),则可以看到修补程序的所有属性。这个 MATLAB docs on patch properties 在某种程度上解释这些。

    例如,你如何用这个原理来给曲线上的一个区域加阴影?

    area 在基值和曲线之间创建面片。但看起来并没有一种简单的方法在两条曲线之间创建一个区域。

        3
  •  0
  •   FriskyGrub    12 年前

    不会弄乱 children 你也可以:

    x = 0:pi/10:2*pi;  % from your example
    y = x.^2.;    % from your example
    
    H=area(x,y);
    set(H(1),'FaceColor','k');
    alpha(.5);
    

    为我工作,也帮助了一些 legend 我遇到的问题。

    . 提出一个死板的问题