1、imagesc画两色图,0值为白色 imagesc画图的原理: 1. imagesc(x,y,z),x为x轴的坐标,左小右大,y为y轴的坐标,上小下大,z为坐标点(x,y)对应的值,即z是一个维度为[length(x),length(y)]的矩阵。 axis xy y轴的坐标为上小下大,将其转向成上大下小 2. imagesc(z),x轴的坐标从左到右为1:size(z,2),y轴的坐标从上到下为1:size(z,1) set(gca,’XTicklabel’,x); set(gca,’YTicklabel’,y); 3. 2比1更好:若x中有断点,如:10,12,14,1
2、8,20,imagesc(x,y,z)会自动在x轴坐标中添加16,导致x轴坐标点与格子数目不匹配,而2中先做图,再改坐标标签,则可以避免这个问题。 4. colorbar的颜色与z值的对应关系:z的最小值对应colormap矩阵的第一行,对应colorbar颜色条的最下面的颜色;z的最大值对应colormap矩阵的最后一行,对应colorbar颜色条的最上面的颜色;中间的值为线性对应关系。 5. colormap矩阵的原理: [0,1,0]绿色 [a,1,a]浅绿,a越接近0,颜色越深,x越接近1,颜色越浅 [1,1,1]白色 [1,a,a]浅红,a越接近0,颜色越深,x越接近1,
3、颜色越浅 [1,0,0]红色 colormap的格式:第一行为最小值的颜色,最后一行为最大值的颜色 cc=[0,1,0; 0.5,1,0.5; 1,1,1; 1,0.5,0.5; 1,0,0] colormap(cc) 函数及示例: data=[ 10 40 79502.04 10 45 71288
4、45 10 30 134527.85 10 55 -30919.16 10 50 -13256.87 10 35
5、 166600.83 10 60 -151863.17 12 40 139078.6 12 60 12054.21 12
6、 55 4778.22 12 45 130865.01 12 50 30180.33 12 30 164103.21
7、 14 40 182454.17 14 50 52258.16 14 60 -163383.83 14 55 -151589
8、02 14 45 184441.57 14 30 241319.58 18 60 -170088.44 18 50
9、 126843.98 18 40 253500.14 18 55 47865.07 20 60 -2874.38 20
10、 55 32803.76 20 45 192548.14 20 40 190560.74 20 30 262927.38
11、 20 50 111782.67 22 50 39181.63 22 55 -39797.28 22 60 -166690
12、08 22 45 118027.18 22 35 227859.65 22 40 133560.48 22 30
13、 205927.12 24 30 215106.42 24 55 -51124.79 24 40 156719.22 24
14、 45 141185.92 24 60 -170709.91 24 50 30961.96 26 50 30961.96
15、 26 40 139198.52 26 45 141185.92 26 30 188045.96 26 55 -51124
16、79 26 60 -170709.91 26 35 217838.17 28 45 149411.59 28 55
17、 24946.48 28 35 220303.62 28 30 190511.4 28 40 147424.19 28
18、 60 -163146.94 28 50 92225.51 30 30 139031.88 30 40 93964.74
19、 30 60 -163500.49 30 45 102492.4 30 35 166844.16 30 50 5586
20、5.9 30 55 -48434.02]; redgreendraw(data,'画图'); 保存为函数redgreendraw: %data为源数据,第一列为变量1(参数1),第二列为变量2(参数2),第三列为变量3(指标值:净收益、成功率等) %drawname为图片保存名称,如drawname='我的图片' function result=redgreendraw(data,drawname) x=data(:,1); y=data(:,2
21、); z=data(:,3); %image画图 [xx,yy,zz]=meshgriddata(x,y,z); %用列向量数据构建画图用的矩阵 rgcolor=redgreencolormap(z); %构建红绿色的色图 imagesc(zz) %画图 colormap(rgcolor) %运用红绿色的色图 colorbar %显示出颜色条的示例 set(gca,'XTicklabel',xx); set(gca,'YTicklabel',yy); %axis xy %将纵坐标倒置,即x、y轴的方向变为常用的方向 saveas(gcf,[drawname '.jp
22、g']) result=[drawname '.jpg' '已保存在当前文件夹']; end 保存为函数meshgriddata %x,y,z分别均为1*N的列向量,为了用image画图,需要将z转换为类似meshgrid的结果的矩阵 %横坐标为x中的所有不同取值,纵坐标为y中的所有不同取值 function [xx,yy,zz]=meshgriddata(x,y,z) N=length(x); xy=x*100+y; xx=unique(x); yy=sort(unique(y),'descend'); zz=zeros(length(yy),lengt
23、h(xx)); for i=1:length(yy) for j=1:length(xx) zzz=find(xy==xx(j)*100+yy(i)); if ~isempty(zzz) zz(i,j)=z(zzz); end end end end 保存为函数redgreencolormap %输入值z为需要画图的第三维数据 %函数将根据z的值构造红绿色图,0值为白色;正值为红色,正得越多,颜色越红;负值为绿色,负得越多,颜色越绿 function mycolormap=
24、redgreencolormap(z) N=length(z); mycolormap=ones(N,3); maxz=max(z); minz=min(z); if (minz<0 && maxz>0) %若数据z有正有负,则把负数显示为绿色,负得越多,颜色越绿;正数显示为红色,正得越多,颜色越红 Nneg=round(abs(min(z))/(max(z)-min(z))*N); mycolormap(1:Nneg,1)=(linspace(0,0.999,Nneg))'; mycolormap(1:Nneg,3)=mycolormap(1:Nne
25、g,1); mycolormap((Nneg+1):N,2)=(linspace(0.999,0,N-Nneg))'; mycolormap((Nneg+1):N,3)=mycolormap((Nneg+1):N,2); elseif (minz>=0) %若数据z没有负数,则全部显示为红色,正得越多,颜色越红 mycolormap(:,2)=(linspace(1,0,N))'; mycolormap(:,3)=mycolormap(:,2); elseif (maxz<=0) %若数据z没有正数,则全部显示为绿色,负得越多,颜色越绿 mycolormap(:,1)=(linspace(0,1,N))'; mycolormap(:,3)=mycolormap(:,1); end end






