1、Matlab绘图我们主要讲 .m文件编程绘图一、基本格式function aaaplot(参数 )画图函数function parabolax=-2:0.1:2;y=x.2;plot(x,y)二、基本设置function parabolaaxis(-3,3,-1,5)set(gcf,position,0,0,1200,800) set(gca,FontName,default,FontSize,30,FontWeight,bold) box onx=-2:0.1:2;y=x.2;scatter(-3,4.7,5,w,d,filled)hold onscatter(-3,-0.5,5,w,d,f
2、illed)hold onscatter(3,4.7,5,w,d,filled)hold onscatter(3,-0.5,5,w,d,filled)hold onplot(x,y, -r,linewidth,1.5)注意:在同一个图中画多次画图时应使用 hold on语句,否则后面的会覆盖前面的三、常用的画布、图、坐标轴、线条的设置set(gca,LineWidth,2.5) %设置坐标轴的粗细set(gca,XMinorTick,on) %设置 x轴最小刻度set(gca,YMinorTick,on) %设置 y轴最小刻度set(gca,ticklength,0.025 0.0125);
3、%设置小刻度长度set(gca,tickdir,out) %将小刻度放在坐标轴外面set(gca,position,0.15,0.15,0.80,0.80) %设置图形占画布的比例set(gcf,position,0,0,1200,800) %设置画布的大小 box on %打开图框xlabel(eta,FontSize,35,FontWeight,bold) % 设置 x坐标轴名称 ylabel(dN_ch/deta,FontSize,35,FontWeight,bold) % 设置 y坐标轴名称线型设置颜色设置标记类型设置-r红色实线-.g绿色点划线k,o,filled黑色填充的小圆圈四、
4、画图中的一些技巧应用1、数据的导入A=importdata(0-3.dat); number=length(A); %计算矩阵 A的行数,将行数记为 numberexp_x1=A(1:number,1); %将 A矩阵的第一列放入到 exp_x1数组中exp_y1=A(1:number,2); %将 A矩阵的第二列放入到 exp_x1数组中wuchax1=A(1:number,3); %将 A矩阵的第三列放入到 exp_x1数组中wuchay1=A(1:number,4); %将 A矩阵的第四列放入到 exp_x1数组中%导入实验数据文件,数据放入矩阵 A中。还有其它的方式导入2、利用导入的数
5、据画图scatter(exp_x1,exp_y1,250,r,o,filled) %画实验点for i=1:1:numberplot(exp_x1(i),exp_x1(i),exp_y1(i)-wuchay1(i),exp_y1(i)+wuchay1(i),k,linewidth,2.5) end%画误差棒B=importdata(19.6gev_cal.dat) ; % 导入理论数据,放入 B矩阵中cal_x1=B(1:1000,1); % 将第一列数据放到 cal_x1中cal_y1=B(1:1000,2); %将第二列数据放到 cal_y1中hold onfor c=1:1:1000ca
6、l_x11(c)=cal_x1(c); %循环可以设计画任意个点(例如 800个)cal_y11(c)=cal_y1(c);endplot(cal_x11,cal_y11,-k,linewidth,2.5) %画理论曲线3、在图中任意地方写入字符text(-4.8,765,Au-Au ,Fontsize,12,FontWeight,bold,Fontname,Times New Roman )指定写的坐标 要写的字符设置字号字体加粗设置字体名称 还有 gtext函数可以在画图过程中点击选择位置4、任意写入刻度值set(gca,xticklabel, ) %不写 x坐标轴上的刻度值 set(gc
7、a,yticklabel,Two,Four,Five,Seven)set(gca,yticklabel,0, ,100, ,200) %只显示 0,100,200这三个刻度值不显示的刻度值用空格表示5、数组调用pp=10,15,40,1.0set( gca,FontName,default,FontSize,pp(1))ylabel(dN_ch/deta,FontSize,pp(2) )scatter(exp_x1,exp_y1,pp(3),k,p,filled)set(gca,linewidth,pp(4) po1=0.1,0.56,0.4,0.42 set(gca,position,po1
8、) po2=0.56,0.56,0.4,0.42 set(gca,position,po2)M1=-6.0,6.0,0,900 axis(M1)4、写图例a=linspace(820,440,4);b=3.5,3.9scatter(b(1),a(1),pp(3),k,filled) text(b(2),a(1),200GeV,Fontsize,pp(1),FontWeight,bold,Fontname,Times New Roman)scatter(b(1),a(2),pp(3),k,d,filled) text(b(2),a(2),130GeV,Fontsize,pp(1),FontWei
9、ght,bold,Fontname,Times New Roman)scatter(b(1),a(3),pp(3),k,p,filled) text(b(2),a(3),62.4GeV,Fontsize,pp(1),FontWeight,bold,Fontname,Times New Roman)scatter(b(1),a(4),pp(3),k,v,filled) text(b(2),a(4),19.6GeV,Fontsize,pp(1),FontWeight,bold,Fontname,Times New Roman)利用 linspace函数将 820和 440之间平均分成 4等分,并将
10、四个值放入 a数组中利用 scatter和 text函数画图例,所需坐标值可用数组值代替五、画子图1、基本结构function aaaaaxis( -6.0,6.0,0,180)subplot(2,2,1)plot(x,y)subplot(2,2,2)plot(x,y)subplot(2,2,3)plot(x,y)subplot(2,2,4)plot(x,y)(第一个子图)(第二个子图)(第三个子图)(第四个子图)subplot(m,n,p)行数列数当前子图序号2、子图相对位置的设置function aaaaaxis( -6.0,6.0,0,180)subplot(2,2,1)set(gca,
11、position,0.1,0.56,0.4,0.42) plot(x,y)subplot(2,2,2)set(gca,position,0.56,0. 56,0.4,0.42)plot(x,y)subplot(2,2,3)set(gca,position,0.1,0. 08,0.4,0.42)plot(x,y)subplot(2,2,4)set(gca,position,0.56,0. 08,0.4,0.42)plot(x,y)3、子图的一些基本设置function aaaasubplot(2,2,1)axis(-6.0,6.0,0,180)set(gca,position,0.1,0.56,
12、0.4,0.42) plot(x,y)subplot(2,2,2)axis(-6.0,6.0,0,180)set(gca,position,0.56,0. 56,0.4,0.42)plot(x,y)subplot(2,2,3)axis(-6.0,6.0,0,180)set(gca,position,0.1,0. 08,0.4,0.42) plot(x,y)subplot(2,2,4)axis(-6.0,6.0,0,180)set(gca,position,0.56,0. 08,0.4,0.42)plot(x,y)4、在同一子图中画多条线function aaaasubplot(2,2,1)ax
13、is(-6.0,6.0,0,180)plot(x1,y1)subplot(2,2,1)axis(-6.0,6.0,0,180)plot(x2,y2)subplot(2,2,1)axis(-6.0,6.0,0,180)set(gca,position,0.1,0. 2,0.3,0.3)plot(x3,y3)subplot(2,2,2)axis(-6.0,6.0,0,180)set(gca,position,0.6,0. 2,0.3,0.3)plot(x,y)七、程序举例function AuAuaxis(-6.0,6.0,0,800)set(gca,FontName,default,FontSi
14、ze,15) set(gca,LineWidth,1) set(gca,XMinorTick,on) set(gca,YMinorTick,on) set(gca,ticklength,0.025 0.0125); set(gcf,position,0,0,600,800) box on hold onlegend(boxoff); hold on%*以上是一些基本设计 *%*开始画图 *subplot(2,2,1) axis(-6.0,6.0,0,10) m=-6:0.5:6;n=m+2;plot(m,n,-k,LineWidth,1)hold onsubplot(2,2,1) axis(-
15、6.0,6.0,0,10) set(gca,position,0.1,0.56,0.4,0.42) x=-6:0.5:6;y=sin(x)+5;plot(x,y,-r,LineWidth,1)hold onbox on %*以上是第一组数据 *subplot(2,2,2) axis(-6.0,6.0,0,800) set(gca,position,0.56,0.56,0.4,0.42)plot(-5:1:5)box on %*以上是第二组数据 *subplot(2,2,3) axis(-6.0,6.0,0,800) set(gca,position,0.1,0.08,0.4,0.42)box
16、on%*以上是第三组数据 *subplot(2,2,4)axis(-6.0,6.0,0,800) set(gca,position,0.56,0.08,0.4,0.42)box on %*以上是第四组数据 *注意:1、程序段之间要分隔开来,以便程序太大时容易查错;2、应做好注释;3、同类的设置尽量放在一起;4、要注意语句前后顺序,防止某些设置不起作用;5、某些相同字母的设置大小写应统一,方便使用 “查找 替换 ”功能(例: linewidth LineWidth);6、尽量使用编程语言来画图,少用图形拖动来修改。subplot(4,3,2:3) 我们的研究中应注意的问题:1、线条宽度最好设为
17、1;2、单个图形,画布最好设为600*400;3、多子图,画布不应大于800*1000;4、字体大小应该和图形大小比例适当,否则有些字会被挤出画布5、经常用的数字设置尽量用数组代替,方便修改;6、图片生成的是 .fig图,应手动存储为 .eps或 .jpeg图,不应用语句直接存。在 latex中,会对图片进行压缩,线条太粗,画布太大容易出现图片残缺,原因在于压缩时图片信息并不完全按比例压缩的八、一些 matlab图形九、一些还未解决的问题1、在多子图中,坐标名称利用程序还不能使之居中;2、在图片格式转换过程中容易出现问题,例如图片不清晰等;3、一些特殊符号难以实现;4、函数调用还得继续尝试;5、 “十 ”字形的直角坐标系暂不能画出来6、未能实现动画附: Photoshop在科研中的应用1、一些 Photoshop图片2、科研中的应用