两条垂直线之间的阴影区域

Shade area between two vertical lines

我有 12 个时间点的数据 y1=[.61 .52 .45 .75 .76 .79 .82 .6 .66 .54 .43 .21]; 我想将其绘制为线图并在时间点 7 和 8 处绘制两条垂直线并在这两条线之间绘制阴影区域。这个阴影区域应该足够透明以仍然显示线条。我还想要一个图例来显示阴影区域 = 临界期或在线下方的区域内写入 "critical period"。从这个 answer,我试过:

y1=[.61 .52 .45 .75 .76 .79 .82 .6 .66 .54 .43 .21];
N=size(y1,2);
sky_blue = [0, 0, 1] ;
x=1:N;           
plot([1:N]', y1, 'linewidth', 2.8, 'linestyle', '-', 'color', sky_blue);
hold on
x1=7;
x2=8;
y2=get(gca,'ylim');    
plot([x1 x1],y2)
plot([x2 x2],y2)    
h1 = fill(x1,x2,'b','EdgeColor','none');

问题是直到最后一行我无法获得两条线之间的阴影时一切正常。有人可以帮忙吗?

你明白了几乎正确!只需将最后一行代码更改为以下内容:

h1 = fill([x1 x1 x2 x2], [y2 fliplr(y2)], 'b','EdgeColor','none');

fill() 函数将区域(多边形)的角(顶点)的 x 和 y 坐标作为输入,以顺时针或逆时针方式填充颜色(多边形不需要关闭(fill 可以为您关闭)。

这里,我们传入了两条直线围成的多边形的四个顶点的x、y坐标向量数组,从左下顶点开始按顺时针顺序排列。注意:fliplr() 函数只是将 1x2 列向量 y2 从左到右反转。