图形是呈现数据的一种直观方式,在用Matlab进行数据处理和计算后,我们一般都会以图形的形式将结果呈现出来。尤其在论文的撰写中,优雅的图形无疑会为文章加分。本篇文章非完全原创,我的工作就是把见到的Matlab绘图代码收集起来重新跑一遍,修改局部错误,然后将所有的图贴上来供大家参考。大家可以先看图,有看中的可以直接把代码Copy过去改成自己想要的。 <br>%% 直方图图的绘制%直方图有两种图型:垂直直方图和水平直方图。而每种图型又有两种表现模式:累计式:分组式。
figure;z=[3,5,2,4,1;3,4,5,2,1;5,4,3,2,5]; % 各因素的相对贡献份额colormap(cool);% 控制图的用色subplot(2,3,1);bar(z);%二维分组式直方图,默认的为'group'title('2D default');subplot(2,3,2);bar3(z);%三维的分组式直方图title('3D default');subplot(2,3,3);barh(z,1);%分组式水平直方图,宽度设置为1title('vert width=1');subplot(2,3,4);bar(z,'stack');%累计式直方图,例如:1,1+2,1+2+3构成了第一个bartitle('stack')subplot(2,3,5);bar3h(z,0.5,'stacked');%三维累计式水平直方图title('vert width=1 stack');subplot(2,3,6);bar3(z,0.8,'grouped');%对相关数据的颜色进行分组,默认的位'group'title('width=0.8 grouped');1234567891011121314151617181920212223 
%% =========柱状图的进阶==========figure;y=[300 311;390 425; 312 321; 250 185; 550 535; 420 432; 410 520;];subplot(1,3,1);b=bar(y);grid on;set(gca,'XTickLabel',{'0','1','2','3','4','5','6'})legend('算法1','算法2');xlabel('x axis');ylabel('y axis');%使仅有的一组柱状图呈现不同颜色,默认的位相同颜色
data = [1.0, 1.0, 0.565, 0.508, 0.481, 0.745];subplot(1,3,2);b = bar(data);ch = get(b,'children');set(ch,'FaceVertexCData',[4;2;3;1;5;6]);%使用Indexed形式指定每组bar的颜色set(gca,'XTickLabel',{'C0','C1','C2','C3','C4','C5'})axis([0 7 0.0 1.0]);ylabel('micro F-measure');%使每个bar颜色不同,默认的是每个元素在不同组的颜色相同
data = [3, 7, 5, 2;4, 3, 2, 9;6, 6, 1, 4];subplot(1,3,3);b = bar(data);ch = get(b,'children');set(ch{1},'FaceVertexCData',[1;2;3]);%设置第一个元素在不同组的颜色set(ch{2},'FaceVertexCData',[1;2;3]);%设置第二个元素在不同组的颜色set(ch{3},'FaceVertexCData',[1;2;3]);set(ch{4},'FaceVertexCData',[1;2;3]);12345678910111213141516171819202122232425262728  %% 彩色柱状图 %用到的数据 n = 8; Z = rand(n,1); figure; %默认图片 subplot(1,3,1); bar(Z); %简单的Matlab作图 % 这个图根据数据列中值的大小着色。每列中的值越大,颜色越突出 subplot(1,3,2); h=bar(Z); colormap(summer(n)); ch = get(h,‘Children’); fvd = get(ch,‘Faces’);%针对矩阵时,只能用fvd=get(ch{col},‘Faces’),下同 fvcd = get(ch,‘FaceVertexCData’); [~, izs] = sortrows(Z,1); for i = 1:n row = izs(i); fvcd(fvd(row,:)) = i; end set(ch,‘FaceVertexCData’,fvcd) %图片会以渐变的方式着色,效果非常不错 subplot(1,3,3); h=bar(Z); ch = get(h,‘Children’); fvd = get(ch,‘Faces’); fvcd = get(ch,‘FaceVertexCData’); [zs, izs] = sortrows(Z,1); k = 128; % 准备生成128 3 行的colormap colormap(summer(k)); % 这样会产生一个128 * 3的矩阵,分别代表[R G B]的值 % 检视数据 whos ch fvd fvcd zs izs % Name Size Bytes Class Attributes % % ch 1x1 8 double % fvcd 66x1 528 double % fvd 13x4 416 double % izs 13x1 104 double % zs 13x1 104 double % shading interp % Needed to graduate colors for i = 1:n color = floor(ki/n); % 这里用取整函数获得color在colormap中行 row = izs(i); % Look up actual row # in data fvcd(fvd(row,1)) = 1; % Color base vertices 1st index fvcd(fvd(row,4)) = 1; fvcd(fvd(row,2)) = color; % Assign top vertices color fvcd(fvd(row,3)) = color; end set(ch,‘FaceVertexCData’, fvcd); % Apply the vertex coloring set(ch,‘EdgeColor’,‘k’);

%% 绘制统计直方图%hist(y):如果y是向量,则把其中元素放入10个条目中,且返回每条中的元素的个数;如果y为矩阵,则分别对每列进行处理,显示多组条形。%[n,xout]=hist(y,x):非递减向量x的指定bin的中心。向量xout包含频率计数与条目的位置。
x=-10:.1:10;y1=randn(2008,1);y2=randn(2008,3);figure;colormap(winter);subplot(2,2,1);hist(y1);%把其中元素放入10个条目中title('y1为向量,default,n=10');subplot(2,2,2);hist(y2);%分别对每列进行处理,显示多组条形title('y2为矩阵');subplot(2,2,3);hist(y1,x);%用户也可以使用[n,xout]=hist(y1,x);bar(xout,n)绘制条形直方图title('向量x指定条目');subplot(2,2,4);hist(y2,1000);%第二个参数为标量时指定bin的数目title('nbins=1000');1234567891011121314151617181920 
%% ========均值方差直方图========a=[8 9 10 7 8 9];%mean
b=[1 1 1 1 1 1];%stdfigure();h=bar(a);ch=get(h,'children');set(ch,'FaceVertexCData',[4;2;3;1;5;6]);%使用Indexed形式指定每组bar的颜色
hold on;errorbar(a,b,'k','LineStyle','none');123456789 
%% =======散点图scatter , scatter3 , plotmatrix======%scatter3(X,Y,Z,S,C):在由向量X、Y和Z指定的位置显示大小和颜色分别由S和C决定的离散点
figure;[x,y,z] = sphere(16);X = [x(:)*.5 x(:)*.75 x(:)];Y = [y(:)*.5 y(:)*.75 y(:)];Z = [z(:)*.5 z(:)*.75 z(:)];S = repmat([10 2 5]*10,numel(x),1);C = repmat([1 2 3],numel(x),1);subplot(1,2,1);scatter(X(:),Y(:),S(:),C(:));title('scatter');subplot(1,2,2);scatter3(X(:),Y(:),Z(:),S(:),C(:),'filled'), view(-60,60);title('scatter3');%plotmatrix(X,Y)绘出X(p*M)与Y(p*N)的列组成的散度图(N,M)figure;X=randn(100,2);Y=randn(100,2); subplot(1,3,1),plotmatrix(X);%等价于plotmatrix(X,X),除了对角上的图为X每一列的直方图hist(X(:,col))title('plotmatrix(X)');subplot(1,3,2),plotmatrix(X,X);title('plotmatrix(X,X)');subplot(1,3,3),plotmatrix(X,Y);title('plotmatrix(X,Y)');123456789101112131415161718192021222324 
%% ======切片图和切片等位线图=======%利用 slice 和 contourslice 表现 MATLAB 提供的无限大水体中水下射流速度数据 flow 。 flow 是一组定义在三维空间上的函数数据。%在本例中,从图中的色标尺可知,深红色表示“正速度”(向图的左方),深蓝表示“负速度”(向图的右方)。% 以下指令用切面上的色彩表现射流速度[X,Y,Z,V]=flow; % 取 4 个 的射流数据矩阵, V 是射流速度。
x1=min(min(min(X)));x2=max(max(max(X))); % 取 x 坐标上下限
y1=min(min(min(Y)));y2=max(max(max(Y))); % 取 y 坐标上下限
z1=min(min(min(Z)));z2=max(max(max(Z))); % 取 z 坐标上下限
sx=linspace(x1+1.2,x2,5); % 确定 5 个垂直 x 轴的切面坐标
sy=0; % 在 y=0 处,取垂直 y 轴的切面
sz=0; % 在 z=0 处,取垂直 z 轴的切面
figure;slice(X,Y,Z,V,sx,sy,sz); % 画切片图view([-12,30]);shading interp;colormap jet;axis off;colorbar;% 以下指令用等位线表现射流速度
v1=min(min(min(V)));v2=max(max(max(V))); % 射流速度上下限
cv=linspace(v1,v2,15); % 在射流上下限之间取 15 条等位线
figure;contourslice(X,Y,Z,V,sx,sy,sz,cv);view([-12,30]);colormap jet;colorbar;box on;1234567891011121314151617181920 
|