|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
* e1 w* f h. H3 h( d [' T
colormap简介8 E: m W/ |7 q
matlab中,每个figure都有(而且仅有)一个colormap,翻译过来就是色图。
5 `4 z5 n4 R' y4 B: q+ M! S9 v2 O; X9 H. k+ u* r3 H
1 w, D9 B" u( x3 P3 E) ~
colormap(map) 用map矩阵映射当前图形的色图。
, {6 i" W; l" P4 d1 ocolormap('default') 默认的设置是 JET.
- l' x7 y9 Y; q: s9 m# `map= colormap(获得当前色图矩阵. 9 b: h1 z/ [2 i0 k( n
colormap(ax,...) 应用色图到ax坐标对应的图形,而非当前图形。
( R4 Z, Z9 J. Q! U4 H C3 ^* \0 E# a& H0 ~( ^
colormap实际上是一个m × 3的矩阵,每一行的3个值都为0-1之间数,分别代表颜色组成的rgb值,如[0 0 1]代表蓝色。
; R7 K0 J& k4 e
* l0 {: }* z3 \8 y6 {5 s, T. A系统自带了一些colormap,如:winter、autumn等。输入winter,就可以看到它是一个64x3的矩阵。* A, b0 }6 j2 H' ~1 ^ u1 k
" b6 o+ h7 Z; K8 K' s. X/ r8 X
用户可以自定义自己的colormap,而且不一定是64维的。
# q V$ {) q6 `5 y( U& G v6 s- T2 \' n3 S( G" r+ P: M+ k: f8 \0 \
系统自带的colormap:: q6 j' z' A% W5 b
/ j( p* s4 A* r) t! W% a
, d" l/ e/ E& [& i8 T. q' \4 ^6 U9 J% w
5 {' J3 Q! s! D$ {$ ?3 C' T$ u; M
% N' \$ ~; q1 o, s+ I y: C2 colormap用法+ r) k4 R% X- z, [$ B" I! _ [
那么颜色在fill或patch中到底是如何显示的呢?9 } S: |& L2 s. ~" A# I7 z
* y! s% b0 L& `( _9 l本质上,是把具体的颜色变成colormap中的相应index,也就是行数。
) P" Z0 ?$ p# `# {/ P' m, s, o8 H, {6 p# t' V8 A
这个过程叫做换算映射:将指定的数值颜色向量(矩阵)C,映射到对应的颜色。
6 `/ Y7 q1 C% F. X" c+ Y
3 ]. k# ?( }2 B) p) s在matlab中,图形窗的属性'CdataMapping’缺省设置值为'scaled',也就是线性映射。1 ]) h5 {: a. ]- L' Z9 S
( G. L* W0 i4 P; ? ?) O
映射过程如下:
+ v5 g/ s( o, I1 J" h! C/ o: @8 J9 x4 S# Z+ i3 g. [/ U4 d" U; U
首先,需要根据caxis取得Cmin和Cmax两个变量(默认值为0和1),画图时如果指定了数值颜色向量(矩阵)C,Cmin和Cmax自动设置为C中的最大值和最小值。当你想控制时,可以自定义。比如将Cmax减小,这样将把所有大于Cmax的C值,全部都映射到同一个颜色(colormap中index最大的行代表的颜色)。
8 [3 Z8 N. y; m5 H2 Y8 x4 j根据Cij在Cmin和Cmax之间的比例关系,确定对应的颜色的index,默认为线性映射。 0 n4 t+ S4 i3 H, } K' S
也就是说,当制定了数值颜色向量(矩阵)C之后画图,图中颜色的使用范围会自动占满整个颜色范围!!!% B, H: ^" K0 [6 K* I
! x& Y$ B) P q- t7 y
另外,fill中指定了某些点的颜色值,其他颜色值都是采用插值的方法确定。% D& }1 {& Q4 ?5 Q: e+ B
% J& ]0 K0 G! y& r% b
' }7 Z& Q! t T8 f) T! ] \) G6 n b% A! l3 实例; A. u0 H% _; q1 s/ A2 w( }
实例1:
1 S8 q6 F# G6 K$ [5 Q8 _colormap([spring;summer;autumn;winter])%相当于自定义了一个256*3维的colormap
1 z: N; G! n: {5 W& G %实际上spring,summer,autumn,winter$ L# r9 r$ T" D* N& N c
%都是64*3维的colormap" G2 s; E% h }1 |/ T
x=[0 1 1 0]; M$ X/ Z- u ^: F
y=[0 0 1 1]; %定义四个点 [0 0] [1 0] [1 1] [0 1]
( U. f1 G, r) I$ m ffill(x,y,[0 0.1 0.2 0.3]); %定义四个点的C值 & ~. J3 T3 E& c2 q/ O* Q$ s+ V
%则Cmin=0,Cmax=0.3
! @5 a* C5 B& p8 o2 ~' s; h# rcolorbar;
; A2 b' i# a) u8 E# Emap=colormap; %map为256*3矩阵0 B- |+ u9 l- t. w1 S1 |3 w
7 X* h4 j4 w m$ V1 A# p7 s+ ^- P8 b; D. \( @/ d, r: B
结果如下:- Z1 [0 i& B0 O: r- V
% B6 I7 A6 F" v1 |
6 ~' p8 b, Q) p% H' Y
+ L( q& ? k, ~6 R( z4 o, @+ Z; P实例2:) n0 U- _5 H+ y8 O4 ]/ ]% F) y
v, f/ I! e7 _
%本例中颜色从[0 0 0] 变化到[1 1 0]( }0 ?$ ]. ]' j3 f1 B
%增加row_cmap的值,如变化到100,则可看到颜色的渐变,而非跳跃型变化。
E; p* `! v% i( I( r7 A2 Brow_cmap = 15; %定义色图矩阵的行数. P2 H8 F( Z) s) G
color_map=zeros(row_cmap,3); %定义色图矩阵
1 A+ D& F9 V0 ~) tcolor_r = 0:1/(row_cmap-1):1; " w8 p( \: X& a+ Y7 q
color_g = 0:1/(row_cmap-1):1;
u# n: M; \* c$ c6 e) X. \- s) Acolor_b = 0:1/(row_cmap-1):1;
, M; @# T- N6 Bcolor_map(:,1) = color_r;
- s5 I3 o/ w, n& ?" s; \4 mcolor_map(:,2) = color_g;
4 D7 @: M+ s3 D4 G) d7 @. `colormap(color_map);. d" y' W( {/ W- Y. f
" w% r4 [& I# w& V) o0 G8 t) X
x=[0 1 1 0];6 V4 l6 x: s: B, x7 p6 Q/ x
y=[0 0 1 1]; %定义四个点 [0 0] [1 0] [1 1] [0 1]! k8 V9 ^3 o/ n O t
fill(x,y,[0 0.1 0.2 0.3]); %定义四个点的C值 & W' w$ H0 c# ^9 D* |/ i
%则Cmin=0,Cmax=0.3
( `$ x# g+ ?, H! @colorbar;* t- \; U' B" u! w" D& P
map=colormap; %map为15*3矩阵
& F7 S% S3 |. `8 N" ]7 K% T6 _- rcolorbar;$ ~0 x5 c) {$ i0 o8 ~$ X) w
* V- ^' S! \% E: R E& _+ G- T结果如下:
* s" `) l, ^1 k- k& E: h& X6 i
- n- P& ^; @% E4 R+ P3 n! L; l. q
( J7 [# y# \, q6 Y6 H5 R8 M
4 |% w8 N+ h1 Y
" O0 X! J8 e4 G N- h) s
( ~- m& l3 l6 X2 c' v2 t/ n4 a( Q2 [
2 u) [/ c. w/ h0 j" a. @& i* Q, Y" ~7 e4 ?/ D& B* [) k( U
|
|