EDA365电子论坛网

标题: matlab 的 colormap 函数 [打印本页]

作者: uqHZau    时间: 2021-6-7 10:33
标题: matlab 的 colormap 函数
. o" j/ p" [0 A% Q( k0 c
colormap简介( C9 w9 C- ?  s' f: _2 R3 z1 R. }
matlab中,每个figure都有(而且仅有)一个colormap,翻译过来就是色图。
  P1 Z  C( m; F% g/ S# U: `2 b  `7 Q

; c5 d7 }8 Z* mcolormap(map) 用map矩阵映射当前图形的色图。
; _9 M% ?3 Z, Scolormap('default') 默认的设置是 JET. 3 n4 W4 W8 w9 F  f8 _8 i) Z
map= colormap(获得当前色图矩阵. * E& ?( T4 y5 a6 b
colormap(ax,...) 应用色图到ax坐标对应的图形,而非当前图形。; t1 x4 |& G( K7 V$ q: p
. x* h$ U' m" G' J
colormap实际上是一个m × 3的矩阵,每一行的3个值都为0-1之间数,分别代表颜色组成的rgb值,如[0 0 1]代表蓝色。- V' I# z+ o3 d, J$ b+ k) @

+ _, O2 s4 z8 |# R2 E$ K' X系统自带了一些colormap,如:winter、autumn等。输入winter,就可以看到它是一个64x3的矩阵。
1 l" Y6 u7 B" `2 Z* i! L% G1 k! A; \% Z9 u( P. v7 H
用户可以自定义自己的colormap,而且不一定是64维的。
$ l& n/ ^/ ^; T- X
, M& W- q8 X  F. @% L系统自带的colormap:
+ p8 Q( K9 p/ _- W' O" _% g% m* V# h8 a

" @8 H1 W# s6 q8 @: }4 X1 |7 d" z+ ?1 S. A  C( L
( D& J3 x6 Y$ y( k: g
2 colormap用法% w" V8 Z" l, D
那么颜色在fill或patch中到底是如何显示的呢?
6 @$ b, R6 p: `4 T; H# n
; O: G* I8 f2 C本质上,是把具体的颜色变成colormap中的相应index,也就是行数。
( e# u' ^+ B+ ]% T4 C8 e8 O- }4 B6 P# z; C  Z# O
这个过程叫做换算映射:将指定的数值颜色向量(矩阵)C,映射到对应的颜色。7 d, ^; S! Z& L2 U2 e' o) K

3 y* @* c8 R) z0 Z9 f  ]% K在matlab中,图形窗的属性'CdataMapping’缺省设置值为'scaled',也就是线性映射。
9 u+ ^& ?! U+ Q* Q/ D5 d
4 f$ ~( e, G( Q/ w映射过程如下:
" ^  r2 b& h/ G: Y6 I" n, D1 E
- u9 u  Q& M$ d1 ~- D* V: a首先,需要根据caxis取得Cmin和Cmax两个变量(默认值为0和1),画图时如果指定了数值颜色向量(矩阵)C,Cmin和Cmax自动设置为C中的最大值和最小值。当你想控制时,可以自定义。比如将Cmax减小,这样将把所有大于Cmax的C值,全部都映射到同一个颜色(colormap中index最大的行代表的颜色)。
: {: q( g6 l7 D3 J根据Cij在Cmin和Cmax之间的比例关系,确定对应的颜色的index,默认为线性映射。 6 K  l. {, e5 r$ l  d- j/ P, B  S
也就是说,当制定了数值颜色向量(矩阵)C之后画图,图中颜色的使用范围会自动占满整个颜色范围!!!  U. x, U( A% K# N
1 y: I. f& ~9 G, [# V: ~
另外,fill中指定了某些点的颜色值,其他颜色值都是采用插值的方法确定。
/ m8 E( ?' X, s  N; C+ G; b& Y3 z2 n2 I, _, x

; F$ l$ k3 s4 ]3  实例
$ u: Y! m* p) M/ E5 q3 F2 I实例1:
. R, ?  `0 J- p( }: ]) k% {colormap([spring;summer;autumn;winter])%相当于自定义了一个256*3维的colormap  ! g/ t* S0 f/ ~: \. o! s: D/ j) p
                                       %实际上spring,summer,autumn,winter2 g* Z2 o5 t1 X5 x7 B5 f, y" H4 }0 q1 h% c
                                       %都是64*3维的colormap
+ q0 h5 ]! B7 l2 B/ n  q# N7 _x=[0 1 1 0];2 C' J1 {( a- J
y=[0 0 1 1];                           %定义四个点 [0 0] [1 0] [1 1] [0 1]
1 n! f2 h  W( G5 p( Pfill(x,y,[0 0.1 0.2 0.3]);             %定义四个点的C值   
5 t+ ]& _6 @& Z                                       %则Cmin=0,Cmax=0.3# e- j4 |/ w1 r5 A4 K
colorbar;0 N" K, ~- \. Q3 m1 Q$ F. Y/ z% l
map=colormap;                          %map为256*3矩阵* {# Z4 h. U; |; f) w0 f9 ^
4 x% t1 Q6 `5 ?$ C1 ^# ]3 }7 P

; C& H# ]. n5 G0 |/ P6 z结果如下:* K- Z7 r- L) z8 ?& w" u2 M
  C+ T- H$ T1 L' S$ ?
3 [0 P$ Y2 w6 ^2 v

1 {$ c2 |! t& _5 i1 t实例2:
0 U, N+ n% U7 }9 N
/ t+ R! k$ t) ~5 E%本例中颜色从[0 0 0] 变化到[1 1 0]
1 b! i+ E* e  O4 e$ F%增加row_cmap的值,如变化到100,则可看到颜色的渐变,而非跳跃型变化。
" x" O. K$ t7 M6 V1 K1 B/ hrow_cmap = 15;  %定义色图矩阵的行数2 f1 |. R( ?5 v; F, l; X' p3 Y' U
color_map=zeros(row_cmap,3);  %定义色图矩阵& D8 B9 ]7 c% J) |, b
color_r = 0:1/(row_cmap-1):1;
- l, Z# K7 K7 d; \' p4 ycolor_g = 0:1/(row_cmap-1):1;% }, E: `4 {" r: \3 g
color_b = 0:1/(row_cmap-1):1;6 T1 s  K. W% g% J) w, A, B, K' C- k
color_map(:,1) = color_r;
0 H7 C, E! Y- o& G1 s- b1 r. k% gcolor_map(:,2) = color_g;
, L. h* b- T, w+ ?! i' Ecolormap(color_map);; n8 d+ V7 \6 |8 U8 c0 l0 d9 r

8 I9 v1 P/ b+ |, W9 B9 [x=[0 1 1 0];- S$ Z+ Y$ z" I( V8 [
y=[0 0 1 1];                           %定义四个点 [0 0] [1 0] [1 1] [0 1]
; |, d8 t( q& I$ Yfill(x,y,[0 0.1 0.2 0.3]);             %定义四个点的C值   
( V9 ^" _; }1 X. M$ {! b                                       %则Cmin=0,Cmax=0.3  B1 Z) J% o3 D1 T; \5 @9 W! ?
colorbar;5 G9 V, a8 r  L1 u
map=colormap;                          %map为15*3矩阵
$ D, G# K, Z; V' F) R1 wcolorbar;
, I( Z0 q' h9 c) |/ R: f. `4 Q- A- _' z% y
结果如下:0 R3 v0 b  r  H
' Q  {  v' r' p

0 i4 k' G$ B4 f8 i7 U( ~& ?+ G, \" Q3 ]0 c/ X

- A% {' w+ X, ]! b  ^8 `
+ x7 N( l+ L  Z+ ~- E5 r4 W  v8 }) c: {) E& L- N

4 f3 d1 _3 d% R: I1 Y7 W
作者: NNNei256    时间: 2021-6-7 10:43
matlab 的 colormap 函数
作者: CCxiaom    时间: 2021-6-7 13:35
matlab 的 colormap 函数
作者: greensmile    时间: 2021-6-7 13:36
matlab 的 colormap 函数




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2