|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
; k& X5 C3 E7 {& L3 d
colormap简介
& |2 v+ S" ]4 Z# P4 {matlab中,每个figure都有(而且仅有)一个colormap,翻译过来就是色图。! d3 R. W- I2 J/ K
! G q5 a7 s! s+ ~ A) k$ R
$ V% \2 x! O; F/ E! U3 Tcolormap(map) 用map矩阵映射当前图形的色图。
6 m' m1 ?, p* C+ X6 Q5 ocolormap('default') 默认的设置是 JET. % I% X; L; t. j$ R* Z
map= colormap(获得当前色图矩阵. - F w8 R3 e: x/ S) h' E- y2 K
colormap(ax,...) 应用色图到ax坐标对应的图形,而非当前图形。
6 e0 E4 `. t) ^2 L' m2 g3 O' Q6 m, f+ V" {3 l/ o
colormap实际上是一个m × 3的矩阵,每一行的3个值都为0-1之间数,分别代表颜色组成的rgb值,如[0 0 1]代表蓝色。- {# g$ i8 E% z0 G
/ M/ b9 e7 w- n
系统自带了一些colormap,如:winter、autumn等。输入winter,就可以看到它是一个64x3的矩阵。5 z, c! ], ?1 D9 F. E c S
4 o$ r* S& v( M6 c7 Y
用户可以自定义自己的colormap,而且不一定是64维的。
, _6 q* Q) s/ M3 L/ J
. G1 w4 v* h5 T6 B, r* ~系统自带的colormap:! F* K& m3 c# q5 w6 L; p( a
8 l, ]1 j; S# x$ c
8 ] l1 [5 F+ \
* Y3 @+ ]* p. s- ]5 @
0 m- r1 s; j% x. l' g2 @2 colormap用法8 c. N9 e5 Q5 g& l! h/ [
那么颜色在fill或patch中到底是如何显示的呢?( h3 _) s) t' o8 z
' @# P/ ~& a b* K+ S5 M! {
本质上,是把具体的颜色变成colormap中的相应index,也就是行数。
7 v2 U. N0 ?$ I- B' A3 t2 B* K/ o8 K7 H; r. W
这个过程叫做换算映射:将指定的数值颜色向量(矩阵)C,映射到对应的颜色。
. [5 |: _* L' z* W& z" N j/ I6 j0 n9 ~* e( q: j2 [. z
在matlab中,图形窗的属性'CdataMapping’缺省设置值为'scaled',也就是线性映射。2 N" p5 L4 q$ G1 ^, x. P! L
6 n4 l, L7 F) d) r! B: H7 I映射过程如下:
: c, t1 X0 I/ L4 P, n
! N3 ~% m; U, k首先,需要根据caxis取得Cmin和Cmax两个变量(默认值为0和1),画图时如果指定了数值颜色向量(矩阵)C,Cmin和Cmax自动设置为C中的最大值和最小值。当你想控制时,可以自定义。比如将Cmax减小,这样将把所有大于Cmax的C值,全部都映射到同一个颜色(colormap中index最大的行代表的颜色)。
7 t. n% z" U- Z, r" o根据Cij在Cmin和Cmax之间的比例关系,确定对应的颜色的index,默认为线性映射。 ! K ~+ P; U" l1 J! o
也就是说,当制定了数值颜色向量(矩阵)C之后画图,图中颜色的使用范围会自动占满整个颜色范围!!!4 r' N& j- M2 s
2 `0 B) v& e2 ^ g
另外,fill中指定了某些点的颜色值,其他颜色值都是采用插值的方法确定。% h' v/ Q+ O# _0 J! u) o0 x
" D/ D8 |: M% ?& c& Y7 K
- X: A" L1 Q5 e- O" Q3 实例
' [( Z7 Z h! G! b实例1:
7 S1 }, m% `1 kcolormap([spring;summer;autumn;winter])%相当于自定义了一个256*3维的colormap 8 G0 ]! G3 k7 q* V4 \" r" z- e, d
%实际上spring,summer,autumn,winter
) _/ g0 G; G; G- B7 g" g0 H/ o& O2 y %都是64*3维的colormap
6 @. G ^5 b1 z4 w# e' f" c- P% n& r' Ax=[0 1 1 0];: T, p0 _* o; f" K$ B7 v
y=[0 0 1 1]; %定义四个点 [0 0] [1 0] [1 1] [0 1]5 Y! ?, c; b+ d; j5 ^0 Q
fill(x,y,[0 0.1 0.2 0.3]); %定义四个点的C值 , {: Z" K `$ h' M
%则Cmin=0,Cmax=0.3
3 \1 y* f, k. |6 F4 bcolorbar;4 o+ m' v) G; x0 r" K# L
map=colormap; %map为256*3矩阵
2 l' }" G ~ [3 M8 n* r" K$ u) {. `8 Q3 `0 }4 [+ ~
- h4 Y" N" _& v0 A* Y. ]
结果如下:6 k' ^- y5 [" r
" B# ]! p+ d- A' \; A. v! C
7 Q. T$ d& B9 Q" s) [% ?0 r1 n
* {; l4 I @! ?6 t6 v! ~2 P实例2:
3 K$ E1 O3 q" ^' K7 Y e0 Q* f6 c* J7 B0 x, |
%本例中颜色从[0 0 0] 变化到[1 1 0]
- I" v5 `! O6 q%增加row_cmap的值,如变化到100,则可看到颜色的渐变,而非跳跃型变化。. Y% J3 n% S, w& Z) o0 W
row_cmap = 15; %定义色图矩阵的行数) k- r p! t) u. J
color_map=zeros(row_cmap,3); %定义色图矩阵" F+ R; D! c2 B9 o2 l) g
color_r = 0:1/(row_cmap-1):1;
4 s5 ~# F: {9 p* \color_g = 0:1/(row_cmap-1):1;5 ]+ S6 q3 R9 ]0 I/ h7 \
color_b = 0:1/(row_cmap-1):1;! w( W& U* V* Z+ b9 a
color_map(:,1) = color_r;
) `7 D( A% S5 k# ^( kcolor_map(:,2) = color_g;
# w/ l J$ v8 i5 P- e' bcolormap(color_map);6 T9 T- I7 ~; D: A% ]) S& m
) t+ ?% _ I }x=[0 1 1 0];
k; o3 M& L) T: y" v6 Ey=[0 0 1 1]; %定义四个点 [0 0] [1 0] [1 1] [0 1]
[. a; L6 M7 w, F5 ~fill(x,y,[0 0.1 0.2 0.3]); %定义四个点的C值
9 E8 S! s4 g0 [- K7 y %则Cmin=0,Cmax=0.3
# t! s0 h9 W6 `colorbar;
5 f4 B; k* |: R! O( I" T- Smap=colormap; %map为15*3矩阵! ^/ J5 P% A y' Q" S
colorbar;0 w9 D- R7 p# X2 c4 g
* v! B- ^. S6 \
结果如下:' V' a( W8 F/ t ?% H+ I- k1 k& g
' F- D* h" r3 u, D' M0 q) J
/ \% `1 Y4 k% ^
( q) y1 c3 w+ t# M+ U$ K3 z+ N/ s8 Q& w
, B) d0 c6 L# Z
2 ?' p' M& A1 Q, F7 C0 j
8 k$ \! L+ c1 `/ Y |
|