通过阴影填充曲线所围区域

6

如何在plot()中轻松地为曲线y=x^2下方的区域添加浅色阴影(或者斜线图案,或者其他任何不同于其他部分的设置)?

x = 0:pi/10:2*pi;  
y = x.^2.;
plot(x,y);
3个回答

11

area(x,y)可以解决问题。但是我不确定该类是否具有FaceAlpha属性。

编辑: 不幸的是,这个类没有FaceAlpha属性。但是你可以通过直接编辑patch来解决问题:

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 S的解决方案基础上,使用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

我还在适应Matlab的方式,所以请原谅我问这个简单的问题。但是在这三行代码中,你在哪里设置颜色呢?例如,如何利用这个原理对曲线上方的区域进行阴影处理呢? - Rook
遮蔽曲线上方的区域:无需使用笨拙的方法。请查看我的答案。 - Jason S
@Jason S:说得好。我不知道你可以将baseval设置在曲线上方!+1 - Doresoom
1
你可以直接在区域句柄上设置FaceColor,而不是在子补丁上设置FaceAlpha。这样虽然不会透明,但你可以实现相同的浅色阴影效果。 - Yair Altman
@Yair Altman:没错,我在回答时假设了同一坐标轴上还有其他曲线/点等被绘制了出来。 - Doresoom

5
一个补充示例以阐明Doresoom的帖子:
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在基准值和曲线之间创建一个补丁。不过似乎没有简单的方法来创建两条曲线之间的区域。


0

不需要操作 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);

对我很有用,它还帮助我解决了一些传奇问题。

为了让一个已经死掉的问题复活。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接