|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
9 A' G& ^4 G6 c6 ?9 L2 J# Ccolormap简介
8 Y1 B# h% _1 }' _9 I% tmatlab中,每个figure都有(而且仅有)一个colormap,翻译过来就是色图。
: r" d- p/ C) _9 Z# b3 o, ]' r- ^# X* V# ^* o4 Y' D3 v
; {4 A% u: K8 z/ u5 _: rcolormap(map) 用map矩阵映射当前图形的色图。 ( f u; `+ ]4 I+ k' J# s+ G
colormap('default') 默认的设置是 JET. % S0 E& [; I1 w& v3 _
map= colormap(获得当前色图矩阵.
7 i# r6 Y7 `- X. L2 icolormap(ax,...) 应用色图到ax坐标对应的图形,而非当前图形。
?6 q8 }4 d5 k- `, C. B; Y
5 k' ^; K0 a0 a, ?colormap实际上是一个m × 3的矩阵,每一行的3个值都为0-1之间数,分别代表颜色组成的rgb值,如[0 0 1]代表蓝色。$ B/ b, _/ j3 U1 r
- a* j- ~( Y! [( u' E
系统自带了一些colormap,如:winter、autumn等。输入winter,就可以看到它是一个64x3的矩阵。* N) i k, V% o
: e( f6 |9 A( ]/ f4 L" @% ], n' r
用户可以自定义自己的colormap,而且不一定是64维的。
1 h4 E+ P( a* g: L; g$ e' n: `/ P
系统自带的colormap:) n& N' E6 c4 ]8 \) E _
/ Y# d% a) T. t u% o
- _) G& y, G! \
9 S+ `$ B& k$ ^3 _, i% P8 |. F% [: i( c0 S" H5 }" e% e; ^4 e% q3 X+ ^
2 colormap用法1 X% ]" @1 L4 V2 L2 Q
那么颜色在fill或patch中到底是如何显示的呢?
3 E* t- A9 K1 I$ v7 M* H2 ]3 q% j* a1 L* B0 Q
本质上,是把具体的颜色变成colormap中的相应index,也就是行数。
" v: R' |' t9 T' p K* _& z( w5 H+ h* a
这个过程叫做换算映射:将指定的数值颜色向量(矩阵)C,映射到对应的颜色。
' I- p# T0 u4 A: J2 Y8 d
, t; a( q( h+ Q) J( ?$ d/ \- N在matlab中,图形窗的属性'CdataMapping’缺省设置值为'scaled',也就是线性映射。
( |( i- d- A9 B) F/ ^2 I% Q& k- X6 I4 n W( i8 ]' [
映射过程如下:
+ r0 Q( w' u% ]- z* M' V
1 t, g9 f6 P, ~首先,需要根据caxis取得Cmin和Cmax两个变量(默认值为0和1),画图时如果指定了数值颜色向量(矩阵)C,Cmin和Cmax自动设置为C中的最大值和最小值。当你想控制时,可以自定义。比如将Cmax减小,这样将把所有大于Cmax的C值,全部都映射到同一个颜色(colormap中index最大的行代表的颜色)。 , z6 _% x7 e( ~! g/ U9 p
根据Cij在Cmin和Cmax之间的比例关系,确定对应的颜色的index,默认为线性映射。 + C r4 X0 [: z* D' }- O1 r' Z0 y6 l$ V
也就是说,当制定了数值颜色向量(矩阵)C之后画图,图中颜色的使用范围会自动占满整个颜色范围!!!
1 H x9 `( E( \$ d; r
: R/ N) }' `8 |另外,fill中指定了某些点的颜色值,其他颜色值都是采用插值的方法确定。- p- C6 A ^( ]# U
$ |7 w f2 M8 a0 T+ L' } _5 _" q7 v* l# _3 w6 ^
3 实例" o2 \/ s$ f, Q3 H9 p, D. f0 w
实例1:
! _$ [2 O- t& {4 B7 qcolormap([spring;summer;autumn;winter])%相当于自定义了一个256*3维的colormap
( z" y% o1 q1 \/ o& f) U5 c %实际上spring,summer,autumn,winter
" f5 x1 \1 i* w1 W7 }$ e/ M! Y %都是64*3维的colormap/ \9 ~0 ]+ k0 q8 o* \, i s/ |
x=[0 1 1 0];9 v) K) U, U/ {* |
y=[0 0 1 1]; %定义四个点 [0 0] [1 0] [1 1] [0 1]& F# O1 g+ t) v' ^ [4 k
fill(x,y,[0 0.1 0.2 0.3]); %定义四个点的C值 9 l. ]9 h5 B# W# G9 G3 k. N, @
%则Cmin=0,Cmax=0.3
; W, J8 c. ^3 U b L( Lcolorbar;
6 u0 b- b+ H+ f* Q2 kmap=colormap; %map为256*3矩阵
; T; M4 B7 e. }+ R2 O/ c/ D f& L( Y
; N+ [! H) W4 y$ p/ W/ _% `6 {
结果如下:
9 ]) u6 V# i$ p. d8 Q+ `; r4 X* q2 n - t6 Z8 y6 y1 \- M& e( ^6 S
7 s0 b+ t( Y% Q: j
- m) X! h7 f5 u! r5 t
实例2:' Z" v9 ~% P% f6 e; K: P
$ R. C3 }8 j5 T- _% A
%本例中颜色从[0 0 0] 变化到[1 1 0]" V' s1 f r8 { V
%增加row_cmap的值,如变化到100,则可看到颜色的渐变,而非跳跃型变化。; ^ b2 O- F1 F# l- v
row_cmap = 15; %定义色图矩阵的行数
! u* o+ f5 m/ R0 X7 m( ocolor_map=zeros(row_cmap,3); %定义色图矩阵 L$ e; x6 y2 [- p. {9 G; S
color_r = 0:1/(row_cmap-1):1; 7 U7 Q9 P0 B2 i8 }' X. M
color_g = 0:1/(row_cmap-1):1;
% [$ v( k5 X: ecolor_b = 0:1/(row_cmap-1):1;1 c; z& n! A; a
color_map(:,1) = color_r; / \1 w7 |3 {- k9 I ~" P% U* y9 [
color_map(:,2) = color_g;$ n f! e% s% k _) A+ j
colormap(color_map);
F0 K5 @/ ^4 R5 P6 E
) T! b0 _! c0 ~3 _. [( K& ~x=[0 1 1 0];
! K- {4 a5 }) i+ Zy=[0 0 1 1]; %定义四个点 [0 0] [1 0] [1 1] [0 1]
2 Z P9 B- o- ~fill(x,y,[0 0.1 0.2 0.3]); %定义四个点的C值 4 g& ?1 G5 \6 m# X7 I$ n% g
%则Cmin=0,Cmax=0.3
0 ?. M O& P5 j# c' Pcolorbar;; n! ]7 C& b2 e4 O7 \9 ~9 i- @+ K
map=colormap; %map为15*3矩阵# s* p( P) D; o4 `7 \# O6 b
colorbar;7 [1 K# p) q( m( j, x' g
/ j" P: f- U2 @# H$ o$ `结果如下:
0 a+ F$ Z) P! @$ v: I( ?8 x) ^% Z0 J" l$ T7 m
* ]/ k% N) a$ R5 z/ D! o
4 p- U' k0 |2 b( r1 N. f! l/ l( J a3 Z- i
3 o" \4 M8 Y t, N/ Q- v
0 V. V8 ^' c7 ~4 m# P
* ]1 j+ a0 N& z8 E4 S |
|