资源描述
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,18,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,颜色越浅
[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.45
10 30 134527.85
10 55 -30919.16
10 50 -13256.87
10 35 166600.83
10 60 -151863.17
12 40 139078.6
12 60 12054.21
12 55 4778.22
12 45 130865.01
12 50 30180.33
12 30 164103.21
14 40 182454.17
14 50 52258.16
14 60 -163383.83
14 55 -151589.02
14 45 184441.57
14 30 241319.58
18 60 -170088.44
18 50 126843.98
18 40 253500.14
18 55 47865.07
20 60 -2874.38
20 55 32803.76
20 45 192548.14
20 40 190560.74
20 30 262927.38
20 50 111782.67
22 50 39181.63
22 55 -39797.28
22 60 -166690.08
22 45 118027.18
22 35 227859.65
22 40 133560.48
22 30 205927.12
24 30 215106.42
24 55 -51124.79
24 40 156719.22
24 45 141185.92
24 60 -170709.91
24 50 30961.96
26 50 30961.96
26 40 139198.52
26 45 141185.92
26 30 188045.96
26 55 -51124.79
26 60 -170709.91
26 35 217838.17
28 45 149411.59
28 55 24946.48
28 35 220303.62
28 30 190511.4
28 40 147424.19
28 60 -163146.94
28 50 92225.51
30 30 139031.88
30 40 93964.74
30 60 -163500.49
30 45 102492.4
30 35 166844.16
30 50 55865.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);
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 '.jpg'])
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),length(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=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:Nneg,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
展开阅读全文