|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
1 m( j" w. ]) m9 J9 ?" C: p
colormap简介
$ g2 L: ] N6 r: t8 |8 ~: z" Nmatlab中,每个figure都有(而且仅有)一个colormap,翻译过来就是色图。& o8 w& Z# z I& x7 g5 I
2 \, l+ Q5 y# B. E
7 v! Y& F' {- R$ `3 Icolormap(map) 用map矩阵映射当前图形的色图。 4 p, p) M' P8 e: _9 E& @- M* M
colormap('default') 默认的设置是 JET.
, w8 V- U: i; u9 T6 Rmap= colormap(获得当前色图矩阵. : d1 V0 P7 d* ~2 b3 U
colormap(ax,...) 应用色图到ax坐标对应的图形,而非当前图形。' J' h) G) o: y) }
- I' R. e9 z1 A, L* p
colormap实际上是一个m × 3的矩阵,每一行的3个值都为0-1之间数,分别代表颜色组成的rgb值,如[0 0 1]代表蓝色。) e8 L, S* J5 L. e% l' H
. q: g$ ~; R. t I8 r系统自带了一些colormap,如:winter、autumn等。输入winter,就可以看到它是一个64x3的矩阵。
4 Z# V! U1 A- L' f4 N& H0 m* R( S2 [" C* P
用户可以自定义自己的colormap,而且不一定是64维的。
& Y; c* ~% b% C/ A
' J: l$ L" i* D5 w系统自带的colormap:
2 r- x5 }. l3 W- S' @
# ~% O% l- m3 Z; r3 P1 n9 h- x
( q. G/ f% X$ e4 n2 C
3 `: Y5 O) I6 `: `6 c0 a
& R- |- F7 H, H& g n' P7 B4 R5 ^- Z2 colormap用法
. y4 M& j/ t5 ?& Z4 A那么颜色在fill或patch中到底是如何显示的呢?
& M" r: v& } n* U) ~; K8 C
% {3 [' S4 G+ ?' p: l本质上,是把具体的颜色变成colormap中的相应index,也就是行数。0 h$ h! A" \6 @% c, W2 w5 e" q
2 M% C8 W% [ A( @+ Z% l4 f
这个过程叫做换算映射:将指定的数值颜色向量(矩阵)C,映射到对应的颜色。
& X' v v% W6 h" N5 e
; G4 r& i, {5 Z( O0 p, z在matlab中,图形窗的属性'CdataMapping’缺省设置值为'scaled',也就是线性映射。4 T* E7 j+ [6 D4 J0 r
/ C3 L. q( i! U0 E) e- U映射过程如下: 9 Y7 X' u0 Q2 u( A' P
4 T! }+ R( B8 R) n7 v
首先,需要根据caxis取得Cmin和Cmax两个变量(默认值为0和1),画图时如果指定了数值颜色向量(矩阵)C,Cmin和Cmax自动设置为C中的最大值和最小值。当你想控制时,可以自定义。比如将Cmax减小,这样将把所有大于Cmax的C值,全部都映射到同一个颜色(colormap中index最大的行代表的颜色)。 + ?* t& W! K+ X4 M3 w/ p" @3 C
根据Cij在Cmin和Cmax之间的比例关系,确定对应的颜色的index,默认为线性映射。
# I; e8 `2 U. z, W也就是说,当制定了数值颜色向量(矩阵)C之后画图,图中颜色的使用范围会自动占满整个颜色范围!!!4 `4 }( H) Q# i3 \) P
* p9 W- x; h, r另外,fill中指定了某些点的颜色值,其他颜色值都是采用插值的方法确定。
. }) N3 a6 O% ]! k6 B! l) s) T7 L7 \
& u" J" {6 O9 J5 o
, H: x8 s W# X1 s3 实例
+ H& `( M4 \5 J实例1:. H1 n5 R3 `/ D0 I! w
colormap([spring;summer;autumn;winter])%相当于自定义了一个256*3维的colormap 0 N! A1 L1 V8 ^, y
%实际上spring,summer,autumn,winter1 {) c! N- f; Q
%都是64*3维的colormap
0 _) B. P2 h% ex=[0 1 1 0];
% D; e0 k# b' |+ N: a9 ey=[0 0 1 1]; %定义四个点 [0 0] [1 0] [1 1] [0 1]0 d: F I K* v4 ]
fill(x,y,[0 0.1 0.2 0.3]); %定义四个点的C值
3 g( P" \) h5 d7 ]- q %则Cmin=0,Cmax=0.39 _! a) p) v$ U, J
colorbar;( H! ?/ ~5 e! }3 R! e% `7 ]
map=colormap; %map为256*3矩阵
( z. T0 V& [4 `' U
" p& b G! }, h9 J
: h! o q" z: ^1 r. C6 r X& |结果如下:
: [8 w, I1 V$ N ; ?2 g" H6 J4 v
. g; M0 r- d f& D8 I3 \8 `. A
) _ N4 y9 p" g实例2:
8 ^7 I6 f9 p# a# Q8 P
: R, E! W/ N0 X( s" A0 x R%本例中颜色从[0 0 0] 变化到[1 1 0]
1 N8 s9 y4 {, k. Y* P# P%增加row_cmap的值,如变化到100,则可看到颜色的渐变,而非跳跃型变化。3 V1 y/ J/ g$ K# F# p' {
row_cmap = 15; %定义色图矩阵的行数9 e' v/ ~. X& z. e
color_map=zeros(row_cmap,3); %定义色图矩阵
+ ~2 [6 P+ h2 a* p5 _, W) Z. Scolor_r = 0:1/(row_cmap-1):1;
* b. T# N" M- b1 E4 dcolor_g = 0:1/(row_cmap-1):1;
8 ^# z& }* X4 h4 [) A- D! Pcolor_b = 0:1/(row_cmap-1):1;
1 z; I- ?! e! N* k* i: J u) [3 p5 Xcolor_map(:,1) = color_r; + B3 w$ ]& O; y( j3 K4 [
color_map(:,2) = color_g; [5 O; _* N5 E+ O8 b2 f, c
colormap(color_map);
3 W- E# e+ e6 S9 b% }2 E) ^9 X# Q+ m: Z, w) H9 Z
x=[0 1 1 0];
. w. {% {/ H# u9 by=[0 0 1 1]; %定义四个点 [0 0] [1 0] [1 1] [0 1]3 c- z/ S+ X( x5 P6 U- J0 {- b i. s3 X
fill(x,y,[0 0.1 0.2 0.3]); %定义四个点的C值
- q% j: _8 k$ @; _4 c! D- | %则Cmin=0,Cmax=0.3/ z d) G8 |( M' ^# h; _
colorbar;( J% b' y" b$ c- h* P
map=colormap; %map为15*3矩阵, `9 c5 G [6 F8 N2 v$ o
colorbar;4 h; y' { j# ^ Z: z0 p, E7 c% G
. j( t$ w- r. n& p
结果如下:, L; K# o* U- Q% }+ A
! R( w" l4 Z3 e7 x5 z \0 J
- v0 n; w, ?$ n' W/ ^( ~, A! ?( L. z6 M# Z- Z( l7 q2 r* }# D$ M& j
( E$ {+ a) G. C* Y' k
( ?) e, L P" W, l! Q# O) t6 D
5 } ~. V6 F# n2 f' y; F, U. G: Q9 b( {
|
|