Затенение области, ограниченной кривой - PullRequest
6 голосов
/ 12 мая 2010

Каков будет самый простой способ слегка закрасить (или штриховать, или что-либо, чтобы установить его отличным от остальных) область на графике (), например, ниже кривой y = x ^ 2?

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

Ответы [ 3 ]

11 голосов
/ 12 мая 2010

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!

EDIT2: Чтобы закрасить область над кривой, вы можете использовать второй участок с белой заливкой. Это что-то вроде клуджа, но оно должно работать. Начиная с:

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

или опираясь на решение Джейсона С., используйте базовый вход, чтобы затенить кривую:

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
5 голосов
/ 12 мая 2010

Дополнительный пример для уточнения сообщения Доресома:

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 по patch свойствам объясняют это в некоторой степени.

А как, например, вы могли бы заштриховать область выше кривой с помощью этого принципа?

area создает патч между базовым значением и кривой. Не похоже, что есть простой способ создать область между двумя кривыми.

0 голосов
/ 01 октября 2013

Не связываясь с 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 проблемами, которые у меня были.

. Пнуть мертвый вопрос

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...