|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
4 `; U1 |7 ~( y- n: }- b6 J: c
colormap简介
* [2 E! B* M2 h. \+ g+ Qmatlab中,每个figure都有(而且仅有)一个colormap,翻译过来就是色图。' L# k* H8 E& v, }- z, z. H
2 U7 {2 O' ?, c9 a' Q) u
" y! w# g- L6 Icolormap(map) 用map矩阵映射当前图形的色图。
$ ~2 j B4 O. z0 l+ v) l* D2 D6 Xcolormap('default') 默认的设置是 JET. . V6 p4 u4 B ]: c. j- O4 P
map= colormap(获得当前色图矩阵.
3 a! k" \- R% p5 pcolormap(ax,...) 应用色图到ax坐标对应的图形,而非当前图形。
5 }) c* Q' b+ r& G b% P1 K, m8 @* M0 g
colormap实际上是一个m × 3的矩阵,每一行的3个值都为0-1之间数,分别代表颜色组成的rgb值,如[0 0 1]代表蓝色。
, D) i8 P" X: p0 N+ X& @9 d, s+ U- G* O( W! A0 p3 V
系统自带了一些colormap,如:winter、autumn等。输入winter,就可以看到它是一个64x3的矩阵。, ] a: m- O* x
( _+ L `2 f0 ]7 d% |
用户可以自定义自己的colormap,而且不一定是64维的。
+ h& L/ \& Z8 J' O7 ~/ {( {6 F4 l. m. j6 M B# l
系统自带的colormap:
0 M, H! n; r' t$ _/ L5 _4 C. w* Z, s5 }7 u2 a4 ~% T' o7 f# j! w4 ~
) D, u' z D* c/ C( F! y J
. s0 q5 u% K3 k8 y' V5 y3 \4 D1 ?+ s# Z) x! @& f3 ]* a
2 colormap用法
& {" H+ i l2 ~那么颜色在fill或patch中到底是如何显示的呢?: G/ B! g M( t# B9 o% N
. f9 R% A7 Q2 V% S" G X
本质上,是把具体的颜色变成colormap中的相应index,也就是行数。% d8 U9 a, r |% N, Y/ ]0 N3 l
6 V4 L# O! N! Y# o9 o; V/ H这个过程叫做换算映射:将指定的数值颜色向量(矩阵)C,映射到对应的颜色。6 W1 y* j# e8 e8 v
$ H6 ]# o( ~/ d n& p" T( r' p9 p1 b
在matlab中,图形窗的属性'CdataMapping’缺省设置值为'scaled',也就是线性映射。8 d, n( {5 V' r, N/ \/ c9 p, Y- y
+ \4 L' w& L) W; L, H1 |6 d6 y
映射过程如下:
: }8 y6 e' t+ T* ^2 W
7 N, s* h- p- B4 X: `首先,需要根据caxis取得Cmin和Cmax两个变量(默认值为0和1),画图时如果指定了数值颜色向量(矩阵)C,Cmin和Cmax自动设置为C中的最大值和最小值。当你想控制时,可以自定义。比如将Cmax减小,这样将把所有大于Cmax的C值,全部都映射到同一个颜色(colormap中index最大的行代表的颜色)。 6 ?9 d; D9 a) X4 ]% u( u
根据Cij在Cmin和Cmax之间的比例关系,确定对应的颜色的index,默认为线性映射。
- d# A$ g1 S; i- ^ N也就是说,当制定了数值颜色向量(矩阵)C之后画图,图中颜色的使用范围会自动占满整个颜色范围!!!9 p# ?1 K1 Y( M- A. O
$ k7 z$ z7 m: x另外,fill中指定了某些点的颜色值,其他颜色值都是采用插值的方法确定。
, z5 {# u% O' Q
$ B: ?! g% V2 n# G$ L; f5 [) ~7 O; j; U/ L8 g% V+ R
3 实例: z1 D: X @; Z0 V
实例1:6 X9 a h8 K( c. M( ^
colormap([spring;summer;autumn;winter])%相当于自定义了一个256*3维的colormap
/ x2 n4 Z! A; o# D4 K" s %实际上spring,summer,autumn,winter; K4 J% g; u+ x" M; B/ o0 i3 P
%都是64*3维的colormap
5 Q8 D! _' b& d* c( t, b4 Sx=[0 1 1 0];
^4 f) U2 l- J* O3 E& O9 yy=[0 0 1 1]; %定义四个点 [0 0] [1 0] [1 1] [0 1]
% C& r+ Y0 M8 X- }9 n! k* lfill(x,y,[0 0.1 0.2 0.3]); %定义四个点的C值
( m) Q) l5 X9 f6 r %则Cmin=0,Cmax=0.3
6 n6 m' {# W! f6 J, Ncolorbar;/ z5 O b' P4 h& Q* r
map=colormap; %map为256*3矩阵
C6 S8 K, ?0 x, c! Q0 Y B# g3 `& _6 ^6 ]- ^
/ D+ r9 K" M( ^1 t7 ^4 U6 _) k结果如下:
+ M! k& U4 R" _4 d8 W 2 |" p! V# {& k4 x+ l( [
; _0 k& b5 Y, E1 A1 A* |4 O- M
: L) H1 A; w: v: O实例2:
. g; u) U9 z: k6 N9 b% M' c- U$ f0 g, h" j. S3 c; U
%本例中颜色从[0 0 0] 变化到[1 1 0]# T) O4 [, {) C9 S
%增加row_cmap的值,如变化到100,则可看到颜色的渐变,而非跳跃型变化。* e" q9 z3 g1 P; L7 q6 v( a" n/ M
row_cmap = 15; %定义色图矩阵的行数
- q; l+ t: Z6 U7 {color_map=zeros(row_cmap,3); %定义色图矩阵+ X+ K( P- Y2 u, ~5 J9 g. D" Z
color_r = 0:1/(row_cmap-1):1;
W! F/ o+ z5 J- J# Hcolor_g = 0:1/(row_cmap-1):1;
7 D1 y" m+ L |; v9 Lcolor_b = 0:1/(row_cmap-1):1;0 X: ^1 ^! T, T; e
color_map(:,1) = color_r;
) h# z$ [+ l% T7 E% \" lcolor_map(:,2) = color_g;
" w# }$ c/ `, Z# Qcolormap(color_map);5 `: f: b5 f6 H8 y4 w
) n( K( |* l* \8 K" cx=[0 1 1 0];
( `3 a! n% l# x8 \% \: x% C/ t+ dy=[0 0 1 1]; %定义四个点 [0 0] [1 0] [1 1] [0 1]
" o2 F2 t0 l/ ~) R' ^fill(x,y,[0 0.1 0.2 0.3]); %定义四个点的C值 7 H$ G# M, k; W% i3 {0 q9 N
%则Cmin=0,Cmax=0.3
: B# x% ?* Y M# R3 Dcolorbar;
* @. U- \1 j" c3 amap=colormap; %map为15*3矩阵& L% O# y! }- q' }2 J( b; l9 s8 e
colorbar;
6 a0 I h. u9 v
0 `' o3 m! d: u6 x) f4 @$ A1 y结果如下:) @7 A0 Z0 n! O/ y* U
* u5 N; a s4 e
V# i/ s6 L- T* l4 ^
: i( T3 m8 c! ^! Z
3 @2 r3 D" I, m6 E7 ]8 p$ P
7 I5 P* ?: \, D1 C9 h" E# B* r; R) E
8 Z$ F; _8 \, I! s8 I7 m- P
|
|