|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
" U1 U5 o6 K0 p, o8 acolormap简介
Y# t" F m# K' ~* ymatlab中,每个figure都有(而且仅有)一个colormap,翻译过来就是色图。
/ w" \5 Q0 Z, q$ D# Y( o: H6 ~5 B6 H4 {9 n3 e7 ] j
5 ]" o5 q& H2 ucolormap(map) 用map矩阵映射当前图形的色图。 ! e, H2 h; t' `5 a
colormap('default') 默认的设置是 JET. " g' \6 k0 X7 P8 B& q+ {
map= colormap(获得当前色图矩阵.
) j, B0 C x6 O, t6 Fcolormap(ax,...) 应用色图到ax坐标对应的图形,而非当前图形。% I9 J! j* k; @, |9 h- o4 z% y7 w
% @. ^3 K3 {* Q/ [7 ~" Tcolormap实际上是一个m × 3的矩阵,每一行的3个值都为0-1之间数,分别代表颜色组成的rgb值,如[0 0 1]代表蓝色。6 ?0 A% F- z2 Z
$ X* F2 o/ G; y% H/ |5 U) E, L
系统自带了一些colormap,如:winter、autumn等。输入winter,就可以看到它是一个64x3的矩阵。
0 F8 d& n, n I4 Y4 D2 A7 z
# V- @6 ?. }7 V7 ]- H! ~/ [用户可以自定义自己的colormap,而且不一定是64维的。
2 Z" f4 p( m( U* M" N* X9 v1 v" n; F2 @% S* _, A
系统自带的colormap:
& j. H% M# {0 P2 h
5 \4 Z. f0 `% q! i/ M0 Q) Y- ]: y4 j9 f' {
2 S( C3 o* g! P" G5 T9 b) S( B
W# _& x5 w+ r6 l* E
. w8 \ S) l R+ J: K& {! ]9 n2 colormap用法7 i3 r& }) U6 d9 B2 R5 n
那么颜色在fill或patch中到底是如何显示的呢?( J7 O" l9 u5 j; h- X
2 D/ t! Y5 V) s0 k. N) v# J本质上,是把具体的颜色变成colormap中的相应index,也就是行数。
# o z! ?; V; f# ~+ \; I4 w# q+ s+ B) \# Z2 f# E9 ]% G
这个过程叫做换算映射:将指定的数值颜色向量(矩阵)C,映射到对应的颜色。
7 j2 `4 O# v$ h& m5 D5 k0 z* q+ K K0 f% `7 p
在matlab中,图形窗的属性'CdataMapping’缺省设置值为'scaled',也就是线性映射。/ t5 d7 m+ ~8 F+ K: [4 x
9 T. Y* ^# G2 E1 U A* t
映射过程如下: ' b5 `' H, R( y [3 R
. c) M1 e& d; O! [: ~+ Z7 ~首先,需要根据caxis取得Cmin和Cmax两个变量(默认值为0和1),画图时如果指定了数值颜色向量(矩阵)C,Cmin和Cmax自动设置为C中的最大值和最小值。当你想控制时,可以自定义。比如将Cmax减小,这样将把所有大于Cmax的C值,全部都映射到同一个颜色(colormap中index最大的行代表的颜色)。 5 F' b) `3 p: F3 |
根据Cij在Cmin和Cmax之间的比例关系,确定对应的颜色的index,默认为线性映射。 7 F: Z; b6 y) d
也就是说,当制定了数值颜色向量(矩阵)C之后画图,图中颜色的使用范围会自动占满整个颜色范围!!!
$ H/ Z6 K, i- D7 M) x5 d5 ~' F5 v9 [/ Q
另外,fill中指定了某些点的颜色值,其他颜色值都是采用插值的方法确定。7 J. m& S. R5 W; t
- ]7 c2 N4 `8 Q2 p
$ i* M2 u* a- A" v3 实例% U; j& e+ r4 t* W$ O7 H/ f
实例1:2 e# e/ G8 E0 g& i/ Z A0 v! |
colormap([spring;summer;autumn;winter])%相当于自定义了一个256*3维的colormap 5 L! H6 e, a- I# n
%实际上spring,summer,autumn,winter
- Q, s; t& c8 w# _ %都是64*3维的colormap* O- } E/ N& t/ d
x=[0 1 1 0];
: P3 n' Z, L0 k' J" Q- P/ H7 `5 `) \y=[0 0 1 1]; %定义四个点 [0 0] [1 0] [1 1] [0 1]! H9 |, E1 m S+ Q
fill(x,y,[0 0.1 0.2 0.3]); %定义四个点的C值
y. j6 P1 @4 ?/ p: o %则Cmin=0,Cmax=0.3/ j8 x; m, _, k. r: i
colorbar;8 I* [9 W& L- a* [
map=colormap; %map为256*3矩阵, M }6 Z* W/ _( h
* x( B7 g3 p! o
# T$ g/ q& w$ w+ Y) @0 K
结果如下:3 O2 m: w2 I0 P1 i' S4 e
- c6 J9 [7 n4 L& Q8 p$ ?# }2 h" x
; L, T" u( K+ b' X! A/ m: U+ `7 c
( B) y+ ^: {* X. c实例2:% I9 [- K6 u5 {) z9 T; d' ~
: ] E9 W; {) }, b%本例中颜色从[0 0 0] 变化到[1 1 0]
0 g, Q6 p8 C/ D6 {% F" |( f4 c) k%增加row_cmap的值,如变化到100,则可看到颜色的渐变,而非跳跃型变化。
, e. n0 ?: l8 Z$ |row_cmap = 15; %定义色图矩阵的行数
- L0 W4 L8 e0 @ q' Tcolor_map=zeros(row_cmap,3); %定义色图矩阵
2 a: I( o0 l5 f; t' Y% ocolor_r = 0:1/(row_cmap-1):1;
) U9 v# H% r# R- X8 G. Ucolor_g = 0:1/(row_cmap-1):1;4 X. Y0 ?& y5 ^ u+ T$ `
color_b = 0:1/(row_cmap-1):1;8 I% n7 {8 A+ `, F( E. m
color_map(:,1) = color_r; , @4 d5 ] U8 _3 y, K/ P1 @( H" I
color_map(:,2) = color_g;, m) k; v9 d1 N
colormap(color_map);
! Z- s6 p/ h( ` a5 |" T. C$ ?* G0 S, Z" o8 r% f
x=[0 1 1 0];, y4 q, K% R, D) ?& F
y=[0 0 1 1]; %定义四个点 [0 0] [1 0] [1 1] [0 1]+ ]1 H# S+ c3 C U2 L+ S V% r
fill(x,y,[0 0.1 0.2 0.3]); %定义四个点的C值 & z1 }! |$ ], R [* x
%则Cmin=0,Cmax=0.3! [" k' p. R$ A7 o. q
colorbar;! v) x2 \8 f+ g3 N
map=colormap; %map为15*3矩阵
. n5 e( {8 `; \7 C fcolorbar;
) f) z) k+ J$ \$ @: [! B# \" W8 _$ l. h/ l8 |! `+ o
结果如下:" E6 ^0 _/ t+ W; R9 F9 M E' Y
. e( I/ y8 H# V) \7 \- B, q, |
! {% B. B7 B6 l$ ^/ S- @$ g9 ~& J, a
$ X( W- u/ Y Z$ i3 o) y( ?5 q, Q( `2 e- Z- \* Z. k. _& j
# \; Y0 ~% V* a5 @8 ]4 O7 ]1 C2 v7 @$ m6 u3 z3 ^# i
/ S7 G1 z* e) E% P f4 X. I; L5 q2 S9 l |
|