|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
' L% {, h, t5 `" N0 b' j
colormap简介
6 N8 L9 z! B# t# j4 ~0 `4 z8 Amatlab中,每个figure都有(而且仅有)一个colormap,翻译过来就是色图。( |6 k; j" b+ Z& m- L& V& r& _5 _$ K
1 p* ]/ R! |% V1 j9 C
" L9 U4 j5 H! l7 Mcolormap(map) 用map矩阵映射当前图形的色图。
5 e3 L# U9 B, }5 Bcolormap('default') 默认的设置是 JET. ! J1 x" O1 K: {7 |
map= colormap(获得当前色图矩阵. # p# s( c( `) g
colormap(ax,...) 应用色图到ax坐标对应的图形,而非当前图形。
* b' z* X: f, R, Q1 i7 t
* S o" @& L, p7 Tcolormap实际上是一个m × 3的矩阵,每一行的3个值都为0-1之间数,分别代表颜色组成的rgb值,如[0 0 1]代表蓝色。
6 U7 i" V8 z( x- h' f! s8 R t# I9 `3 U3 d _5 N/ }5 b
系统自带了一些colormap,如:winter、autumn等。输入winter,就可以看到它是一个64x3的矩阵。
: Y2 }& n" k$ }. t: ?7 Y, I! p% J
( A, T6 h' [ Z6 R* Q6 ]用户可以自定义自己的colormap,而且不一定是64维的。
$ s# Q/ ~' m9 j# K! |% H. a' a8 |% E1 W1 G3 n9 C
系统自带的colormap:3 X: v- `8 D% b3 f' u, z
! ~* p# s& B* m/ O
' A8 M2 S4 \+ W1 x8 \! R' g
; S) k) I. F' h3 _% H1 `1 m+ B2 G
7 D0 S( g+ W$ N# U2 g0 L& ]2 colormap用法
# |1 D6 B. s0 y) x1 x a6 v9 H那么颜色在fill或patch中到底是如何显示的呢?
~1 m8 M2 ?: Y% a) ] N$ i
: n$ V. C4 o6 r$ v' R F; Z4 Z本质上,是把具体的颜色变成colormap中的相应index,也就是行数。
3 X; G" a8 K# b5 I0 B; S; m, K3 d9 S, L$ h
这个过程叫做换算映射:将指定的数值颜色向量(矩阵)C,映射到对应的颜色。/ S% P C$ U ^0 \, X V' ~& |
4 N1 V6 T1 l+ E在matlab中,图形窗的属性'CdataMapping’缺省设置值为'scaled',也就是线性映射。4 b% K1 c& b) A+ j2 V* |3 J
2 B' n/ ~% G) W5 _* I' @- x/ R映射过程如下: ( c) r' p0 ~( Z, F7 U; _3 f. b6 x! S9 W
' S7 Y8 d0 H* G9 M9 [& L3 l: Z首先,需要根据caxis取得Cmin和Cmax两个变量(默认值为0和1),画图时如果指定了数值颜色向量(矩阵)C,Cmin和Cmax自动设置为C中的最大值和最小值。当你想控制时,可以自定义。比如将Cmax减小,这样将把所有大于Cmax的C值,全部都映射到同一个颜色(colormap中index最大的行代表的颜色)。
; }3 Q* X+ J8 `& c8 L) x5 }根据Cij在Cmin和Cmax之间的比例关系,确定对应的颜色的index,默认为线性映射。 / U T2 d4 v) z8 \/ w
也就是说,当制定了数值颜色向量(矩阵)C之后画图,图中颜色的使用范围会自动占满整个颜色范围!!!1 t. S: ~1 h b$ L' R! ?
8 y7 L. T6 D6 M" X& c
另外,fill中指定了某些点的颜色值,其他颜色值都是采用插值的方法确定。: p& Z) S% s3 X3 z6 @
7 N, g5 ?+ X) K, E3 k: o( _: x' ?0 d) x' `! H
3 实例
8 y8 {* E! o9 c实例1:
) Q; I A% R* g( s A& ^colormap([spring;summer;autumn;winter])%相当于自定义了一个256*3维的colormap $ E F2 B/ n( H0 d; b/ ~% |
%实际上spring,summer,autumn,winter
J: W- t$ {, r3 G# d2 @ %都是64*3维的colormap4 D% C8 q5 K Y6 r
x=[0 1 1 0];
7 }/ X( q0 R9 ^0 W- v5 Wy=[0 0 1 1]; %定义四个点 [0 0] [1 0] [1 1] [0 1]
2 o( t& n4 j! P7 e, s @fill(x,y,[0 0.1 0.2 0.3]); %定义四个点的C值
: ?. x' N) r" W %则Cmin=0,Cmax=0.3
) s* S% a. B: i: [1 ] {colorbar;
% f: v; V: e$ B" Y0 j+ ]map=colormap; %map为256*3矩阵
+ I, K- T* a7 S% y8 ` j# g _ m+ N& e, M, ~
, t' }) J" }; R% c+ @& y结果如下:
; ]) |. Q# Y) `2 S& \ 1 Z8 X3 F: E2 z6 F0 Y* Z/ T& ], {
y) m& z! o/ G3 n
, [& s8 _1 _( O P; s4 i# L实例2:
9 B4 F* p1 S8 y4 E# q! w
/ m/ y N' d/ Y1 v# l! }( v- y%本例中颜色从[0 0 0] 变化到[1 1 0]8 f& Q, M, t+ g- T) s
%增加row_cmap的值,如变化到100,则可看到颜色的渐变,而非跳跃型变化。9 Y( W1 M- n) t3 w
row_cmap = 15; %定义色图矩阵的行数
' ^, q7 h: Y4 J7 o5 mcolor_map=zeros(row_cmap,3); %定义色图矩阵% B2 M, r3 i4 C" v6 T
color_r = 0:1/(row_cmap-1):1;
! Z8 n. ]7 H* m( e- T6 O5 d7 qcolor_g = 0:1/(row_cmap-1):1;/ |- P5 S6 ?5 x. p5 A0 l5 X! P$ m
color_b = 0:1/(row_cmap-1):1;
: A8 n" D1 N: S& M' M4 F: C& rcolor_map(:,1) = color_r; 6 ^: S0 Z* N$ V+ J; b8 p
color_map(:,2) = color_g;
4 |0 ?1 W( y: M3 Wcolormap(color_map);1 L1 f6 Y' e: w0 ]
; S7 G4 b% ^& G0 h5 c- l. nx=[0 1 1 0];# E! {# g0 l4 x; E; Q+ k
y=[0 0 1 1]; %定义四个点 [0 0] [1 0] [1 1] [0 1]
% z7 P \% j ^% f# e# L) i- zfill(x,y,[0 0.1 0.2 0.3]); %定义四个点的C值 1 o( m* x1 `5 h+ W* p
%则Cmin=0,Cmax=0.3
) A6 B( Q% W" r* ^9 h/ |colorbar;1 E4 x& J Q# c+ N
map=colormap; %map为15*3矩阵5 [9 i2 {( d* I9 f. b8 S
colorbar;$ ]6 N" Q1 ]6 G; e% J7 L
" i2 \0 S9 @4 V5 }; j. y0 K结果如下:0 C, g3 J' B- J; D! H3 I. m8 D
7 F% b4 w4 E, ?+ a7 y- t# I
1 [9 \8 C+ U* U% Q9 w, o- p' q
, w3 T/ w5 Y: |0 Z s
# _$ l6 r/ g+ e# ?+ `; }
+ s5 B2 s( z3 ]+ D& |4 c6 H( P
" v% d/ n6 w+ K2 @3 D7 Z! k( b) s+ z" i. }9 o. z( i
|
|