|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
1 D) E7 J% L; ecolormap简介
0 M, {" o: i! Omatlab中,每个figure都有(而且仅有)一个colormap,翻译过来就是色图。
% i- p5 j0 K0 s, i* R( G
$ G1 ]& k7 t! R6 Y9 p
$ d6 s( D( B) }* J! Scolormap(map) 用map矩阵映射当前图形的色图。 . l2 U$ W5 A( z, r5 O
colormap('default') 默认的设置是 JET.
4 c+ e3 [, v: O. @2 p; ^. jmap= colormap(获得当前色图矩阵.
5 p( O: C$ X7 |9 L4 y9 mcolormap(ax,...) 应用色图到ax坐标对应的图形,而非当前图形。$ l# G9 O/ K) U: O% D
9 l, f$ n: J( B% N6 G; D! Scolormap实际上是一个m × 3的矩阵,每一行的3个值都为0-1之间数,分别代表颜色组成的rgb值,如[0 0 1]代表蓝色。
& _' s+ Z, k& H# e3 X& R0 ]1 V6 M5 l. E6 p0 v
系统自带了一些colormap,如:winter、autumn等。输入winter,就可以看到它是一个64x3的矩阵。$ F- b: h8 j) k5 J4 ?6 `
: D+ } R) O9 C9 s用户可以自定义自己的colormap,而且不一定是64维的。
6 I& `- x1 c8 K9 u0 i; |; H: i; U, }! [& X
系统自带的colormap:' F! Z( Z8 k5 w: P+ B
) _( l! v% r6 j, N# h1 `
; P5 Z7 [- c( v0 E/ m! }/ U
7 J' |. ?9 ^2 n' z* B8 w- o1 z" D& V, Y# b6 H) l) N3 u
2 colormap用法
: M8 F5 m( ]1 l% k2 l0 S那么颜色在fill或patch中到底是如何显示的呢?/ p* p0 h+ u9 q# y1 Z, p `
0 Q# g0 \, e4 m& o3 J本质上,是把具体的颜色变成colormap中的相应index,也就是行数。
3 ?" y7 ^" a! ]- H9 `0 A" D- Q/ k. L2 ~
这个过程叫做换算映射:将指定的数值颜色向量(矩阵)C,映射到对应的颜色。
. D8 T! D2 |# F2 t+ v# K$ W6 L1 H8 K1 J; {1 W( ~
在matlab中,图形窗的属性'CdataMapping’缺省设置值为'scaled',也就是线性映射。- X2 n. z5 U& P! D1 _: T
/ q8 Q( ^# `# ^5 @
映射过程如下: 7 M1 V; f7 A: p. j; H( ]
' ?, }) J; R4 l! p7 A% {! \( o首先,需要根据caxis取得Cmin和Cmax两个变量(默认值为0和1),画图时如果指定了数值颜色向量(矩阵)C,Cmin和Cmax自动设置为C中的最大值和最小值。当你想控制时,可以自定义。比如将Cmax减小,这样将把所有大于Cmax的C值,全部都映射到同一个颜色(colormap中index最大的行代表的颜色)。 6 X) o- ~ B; {/ P2 j/ F; g1 z
根据Cij在Cmin和Cmax之间的比例关系,确定对应的颜色的index,默认为线性映射。 , k7 y, g( \. D y$ b6 K# I0 m
也就是说,当制定了数值颜色向量(矩阵)C之后画图,图中颜色的使用范围会自动占满整个颜色范围!!!- e% |4 K) f$ M" g
; y; t" }3 D* V2 }1 i另外,fill中指定了某些点的颜色值,其他颜色值都是采用插值的方法确定。
& ]: k% `' r3 j; ?" U% d2 y$ c3 {: k/ j" G: D6 G9 d; L, U/ z( w
' O8 h( o; a& o) \# W3 实例
" {7 h; x( W/ d% y5 o$ g" i% \( Q" D实例1:6 ?8 {8 |# e" v3 G$ q2 D1 y
colormap([spring;summer;autumn;winter])%相当于自定义了一个256*3维的colormap
# \ W# O. |! y; k' ` %实际上spring,summer,autumn,winter
% ]5 O5 l$ N) x5 x* t1 | %都是64*3维的colormap R) q+ O5 s2 T K2 _2 l! r0 C( X
x=[0 1 1 0];
( k5 v: H1 g' @, \$ {5 }3 sy=[0 0 1 1]; %定义四个点 [0 0] [1 0] [1 1] [0 1]0 T( D9 [' r% u' c0 v
fill(x,y,[0 0.1 0.2 0.3]); %定义四个点的C值
+ {: K' ^6 i# b5 W4 g; ] %则Cmin=0,Cmax=0.3% M$ b) |; M( i) P w3 D
colorbar;
. v9 ?, f2 |, x% }3 m- Y' W9 }map=colormap; %map为256*3矩阵
" G8 c) ~$ u! M1 p2 E9 N. b z9 a7 q
1 t- E* i! q ~' b H: m3 @' H3 M2 I1 a
结果如下:: c5 K3 u; l% ]! h/ }& W, u6 |8 v7 t
5 E5 s# l( F5 r
# `! y5 C1 w8 E" B6 Z( F, |& V; @3 m- @ U; ^) I6 V, L* l
实例2:+ ~& U* I" B8 @1 g- k6 G0 \
- p2 Z. T/ G% m! b
%本例中颜色从[0 0 0] 变化到[1 1 0]: w1 f( \' l8 i/ v- L- Z
%增加row_cmap的值,如变化到100,则可看到颜色的渐变,而非跳跃型变化。" Z) j8 |6 M; \0 ^$ W8 g/ Z3 q. W; \
row_cmap = 15; %定义色图矩阵的行数
8 t- J9 n0 ^2 _3 X0 g* x2 Y+ Ocolor_map=zeros(row_cmap,3); %定义色图矩阵6 p' A' B$ O# Z3 ?& Y/ F
color_r = 0:1/(row_cmap-1):1;
1 V+ _! [( i- _. z6 ~color_g = 0:1/(row_cmap-1):1;. a2 c0 Q3 U2 h9 ?4 B
color_b = 0:1/(row_cmap-1):1;
1 v" t$ T0 [6 B1 X4 n+ Rcolor_map(:,1) = color_r;
+ c" L' r, D; ~* M3 Kcolor_map(:,2) = color_g;; u* `5 `2 a7 Y0 K1 i- c/ f6 W. }0 x
colormap(color_map);
, a+ G( B& J! @9 }2 \1 Y; ?5 w- O& L: `, |# Y9 K' }
x=[0 1 1 0];
1 e7 `1 b# q& o+ X- Ry=[0 0 1 1]; %定义四个点 [0 0] [1 0] [1 1] [0 1]
/ x8 X3 P# k/ u/ J( Ffill(x,y,[0 0.1 0.2 0.3]); %定义四个点的C值 ) F4 C+ M- H- ~) W) U2 M! h
%则Cmin=0,Cmax=0.3
. ~0 F0 o6 m0 k3 Xcolorbar;% {- f, w& a: @1 Y
map=colormap; %map为15*3矩阵7 q$ A8 ]7 l" _/ Y: {
colorbar;7 R2 p" q- A. D3 l# @$ B4 x0 K
: K' [0 F6 W3 n- } y
结果如下:
- L# L7 n( C$ k
4 a, b: a, m3 J9 o
4 }$ D9 Q0 i# c% q; E
8 Y/ U3 ?5 x1 X, j1 K. K
& Y* x# [) k' U* p
( X q: t; D4 l, p. r) |! ?9 K; y1 H
& p: Z) t! v* d+ x9 G. v
- Y% i' E! c7 u0 [8 k! x |
|