EDA365电子论坛网

标题: 就是达不到想要的效果。 [打印本页]

作者: zophim    时间: 2020-4-10 16:35
标题: 就是达不到想要的效果。
本帖最后由 zophim 于 2020-4-10 16:56 编辑
2 |2 r6 |* v) E  D2 D0 J5 n1 q/ i$ Q, u) b' }" T% r3 \7 e
有一堆0-2范围变动的数据,要将之按顺序画出折线图,如何让y轴大于1的区域为蓝色,小于1的为绿色?
1 `; r+ A; q4 {8 k  \8 l也参考了论坛里相关内容,但是就是达不到想要的效果。我的代码如下(为了防止数据稀疏,采用线性插值法):6 A2 B8 @! C" S% k8 d/ @
x=1:1:100;
/ j5 o% B% W; c/ z* |1 Ky=2*rand(1,100);
" `! o$ M3 \4 t/ m. H8 n/ m. p) H; {xi=0:1/10000:100;
' e0 ]1 v+ Y, T) iyi=interp1(x,y,xi,'linear');- m* L# K' E( e# @$ R0 U- y4 J
plot(xi,yi)
2 @: C+ F2 {- E1 J6 [! J: ahold on/ ~* H; x4 o" U. ]5 u  c4 _; M1 g
area(xi(yi>1),yi(yi>1),'FaceColor','b')( ?' B( d, x  Y8 Q1 r4 q  k
hold on, k% w) Z. d# p, k3 G5 `1 v7 M- o
area(xi(yi<1),yi(yi<1),'FaceColor','g')
: |. v* f: |( V' K( t, A2 F2 W' ^7 z
: O" H) N2 `" ]结果如图所示,但是我想让y轴数值为1的下方蓝色部分应该显示绿色,原先绿色部分应该是白色。
8 l/ m$ I* D; U0 j# O* M9 J* ?6 o请教大神,非常感谢!& N" a0 S: T) m' |
) b! ^0 n; t! N

作者: Zedd    时间: 2020-4-10 18:11
你可以试试换个思路,先把f(x)下区域全部涂蓝,再把y = 1下区域全部涂绿,最后把f(x)与y = 1下的交集涂白
/ [) V' S# g, e- ^  O! W6 Cx = 0:1:20;% ?! @" }6 c" T. v8 J3 S
y = 2*rand(1,21);1 Y( \, N# W. U2 M0 R1 \  \5 I
xi = 0:1e-2:20;6 d: X0 p1 P9 s/ @& X! h; G
yi = interp1(x,y,xi,'linear');
0 e; n6 T& t. zclose all;hold on
4 j  b" S2 Q) v8 q) R8 P# x+ harea(xi(yi>1),yi(yi>1),'FaceColor','b')+ j- G0 l( }2 N+ q% c# ?, x# ?7 w- c
area(xi(yi<1),0.*xi(yi<1)+1,'FaceColor','g')
  U3 s7 j. T4 Q2 q$ [  Q# Qarea(xi,bsxfun(@min, yi, 1),'FaceColor','w')
; e# H3 e& f3 S% _plot(xi,yi,'k-','LineWidth',2)




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2