|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
1 y$ H+ i: c x7 {colormap简介
F% | u- k0 V" W. amatlab中,每个figure都有(而且仅有)一个colormap,翻译过来就是色图。; r' ]" R! O, k* Y3 @; }
* J# T- \2 X! C, w/ B& p* p5 c0 A
0 z y3 P" D; a4 _' d- R0 O$ icolormap(map) 用map矩阵映射当前图形的色图。
* x; K) A/ k, [1 T9 c B Kcolormap('default') 默认的设置是 JET. - ?$ C0 Z* U7 n' _
map= colormap(获得当前色图矩阵.
5 q" |/ H: I: r( Y: acolormap(ax,...) 应用色图到ax坐标对应的图形,而非当前图形。
. @7 S y' B0 f( A6 m3 m1 Q* k8 m5 Z5 M+ H. ~) o' j. r
colormap实际上是一个m × 3的矩阵,每一行的3个值都为0-1之间数,分别代表颜色组成的rgb值,如[0 0 1]代表蓝色。
6 X+ R( Q4 {7 C9 G. b9 L; g
, D" \ }! p# E0 V |系统自带了一些colormap,如:winter、autumn等。输入winter,就可以看到它是一个64x3的矩阵。+ P2 F0 N4 n6 z5 I7 b k3 T' L
& ~4 | i6 H6 ]8 d
用户可以自定义自己的colormap,而且不一定是64维的。
2 K5 N* M% T4 S. G# |: k
/ @, Q3 R/ Q) w- z9 g! O; V0 D系统自带的colormap:
e9 W/ b& [/ u2 M, `9 y. d+ v# t' f% {6 r: c1 l
" v+ o) ~; W2 a V. D
3 B% E* P% }6 R! _
( P% Y. D% A/ g1 g# \' [7 D2 colormap用法
0 F3 @1 d5 G1 p% r9 l1 R那么颜色在fill或patch中到底是如何显示的呢?
$ t4 @3 z' N% t2 u& P/ k2 T$ C4 h6 i9 e& g* T: z4 P8 v
本质上,是把具体的颜色变成colormap中的相应index,也就是行数。/ d; j1 P2 l9 L& e5 Z
7 ~8 e; G W) X0 C, ^6 E这个过程叫做换算映射:将指定的数值颜色向量(矩阵)C,映射到对应的颜色。
( I7 \5 m. Y3 Q: X
7 R7 A4 K/ h) j( {' s: W在matlab中,图形窗的属性'CdataMapping’缺省设置值为'scaled',也就是线性映射。
% g( i2 k5 C8 h3 j A0 [/ m6 b- H% [ L1 |- C) w" D
映射过程如下:
# c! K( e3 @# q$ k* q5 G' R
2 q! j/ G( P! @* d" A* i首先,需要根据caxis取得Cmin和Cmax两个变量(默认值为0和1),画图时如果指定了数值颜色向量(矩阵)C,Cmin和Cmax自动设置为C中的最大值和最小值。当你想控制时,可以自定义。比如将Cmax减小,这样将把所有大于Cmax的C值,全部都映射到同一个颜色(colormap中index最大的行代表的颜色)。 4 Z6 R+ Y8 ]. {7 @, h( ]
根据Cij在Cmin和Cmax之间的比例关系,确定对应的颜色的index,默认为线性映射。 ; w. g, f9 e6 m3 y) B. |5 l: |, E
也就是说,当制定了数值颜色向量(矩阵)C之后画图,图中颜色的使用范围会自动占满整个颜色范围!!!) A1 C. ~& W) R ]) [% h( N
1 M2 a6 G1 A& q0 C! ]另外,fill中指定了某些点的颜色值,其他颜色值都是采用插值的方法确定。
# f2 U( W5 G: l/ s1 _/ E2 O; B" R, |. Y
" G$ n3 P4 }; u/ Y; ]8 J" d3 C% h) ~
3 实例
' a z8 h' T; t9 ?( {: {! m实例1:3 J# G& {( I0 e2 q Z+ p: d
colormap([spring;summer;autumn;winter])%相当于自定义了一个256*3维的colormap
' A; e5 Z5 t/ a6 }: Q+ z/ | %实际上spring,summer,autumn,winter& e& T0 y. c3 t/ j" O
%都是64*3维的colormap
6 N" n$ o2 H! F$ j4 y6 D0 wx=[0 1 1 0];
& j7 L: q7 W( h! ^y=[0 0 1 1]; %定义四个点 [0 0] [1 0] [1 1] [0 1]
3 _" j a# c; m- f: {" f# W% k: B) Ifill(x,y,[0 0.1 0.2 0.3]); %定义四个点的C值 9 p: a J( P9 |& v# ^7 J" h
%则Cmin=0,Cmax=0.3. X3 J3 t# V9 C
colorbar;& e8 ~: @8 ?* j# i* z+ t
map=colormap; %map为256*3矩阵
4 \/ ^' u- h) v# Y
9 v; n# M! D, S3 S) ]$ V" I' i" t
' x& `: Z% N) o% O结果如下:
7 B: O/ S0 U; J- | / ^3 @7 \+ h: T+ @
5 V6 ?# K$ F b0 S: j T
+ n( f' m/ b5 h" F) c: K- Q实例2:
1 w' K9 z1 u p& F% d; e
! V$ t% w" [: G, V%本例中颜色从[0 0 0] 变化到[1 1 0]
) Y3 c: r6 W; m0 i6 W%增加row_cmap的值,如变化到100,则可看到颜色的渐变,而非跳跃型变化。 N/ N0 r3 b- o8 m
row_cmap = 15; %定义色图矩阵的行数0 ]" j2 S1 n, t3 d4 c) ]
color_map=zeros(row_cmap,3); %定义色图矩阵 T/ I' F- T s, y
color_r = 0:1/(row_cmap-1):1;
# @1 P1 T( W$ Y. r Zcolor_g = 0:1/(row_cmap-1):1;
}# U* ^* L8 }' k- v. Ycolor_b = 0:1/(row_cmap-1):1;
* S$ Q" j! Y2 p% ^3 G ucolor_map(:,1) = color_r;
/ w+ f6 y3 C* pcolor_map(:,2) = color_g;( Y3 D% \, H- ]% P# P( J* O
colormap(color_map);+ N0 l4 d6 y. u1 Y9 x4 ]' X
( H8 k; q% v* ?7 ~- t B
x=[0 1 1 0];
' {$ |2 \/ x: V' x2 o5 F2 t, Ay=[0 0 1 1]; %定义四个点 [0 0] [1 0] [1 1] [0 1]: v) O& Y. |+ r) H D
fill(x,y,[0 0.1 0.2 0.3]); %定义四个点的C值
3 X) C$ u$ A3 Y/ q! R1 f0 H %则Cmin=0,Cmax=0.3$ ? j; M- E: S: C& E D
colorbar;
/ ?3 c! o3 N% rmap=colormap; %map为15*3矩阵1 d, ^' V" X: t* u: X3 Y, G* R# Z3 G
colorbar;6 d$ {! A f! p9 u5 t
0 g& B7 M$ k4 T5 U$ j" k( D) _结果如下:) ]& R" Q2 D3 L) d
6 s& v. Y4 D/ M3 M* N! J1 E; A3 m# J
: B9 B2 K# k2 \1 L0 S% j: \& s9 M) n) K6 v
. ?8 [+ a) W! q \. a! i2 ?
* Q" J; n8 A$ j7 T
! p7 Y4 _0 C1 K# V& p) T& v r! g8 b, Y
|
|