MATLAB作图教程
- 格式:ppt
- 大小:1.34 MB
- 文档页数:91
对如下数据,做出截面图,并按相应的颜色值设置数据;x y z s1 2 2 251 3 3 211 4 4 202 5 5 192 6 7 31这样一组s与x,y,z没有直接函数表达式关系的数据希望能够用slice函数绘出切面图,也就是说,在x=1这个切面上,应该有对应s=25 21 20这三种用颜色表示的函数值。
首先,看到slice命令的帮助文件中有个例子:[x,y,z] = meshgrid(-2:.2:2,-2:.25:2,-2:.16:2);v = x.*exp(-x.^2-y.^2-z.^2);xslice = [-1.2,.8,2]; yslice = 2; zslice = [-2,0];slice(x,y,z,v,xslice,yslice,zslice)colormap hsv这里的slice前三个参数,必须构成网格数据,如图:通过:[x,y,z] = meshgrid(-2:.2:2,-2:.25:2,-2:.16:2);figure;view(3);hold on;for i = 1 : size(x, 1)for j = 1 : size(x, 2)for k = 1 : size(x, 3)plot3(x(i, j, k), y(i, j, k), z(i, j, k), '.');endendend这些点构成了网格数据所以,我们需要制造网格数据,进行截面操作;close all;clc;clear;A = [1 2 2 251 3 3 211 4 4 202 5 5 192 6 7 31];x = A(:, 1)';y = A(:, 2)';z = A(:, 3)';% 提取有效数据xb = min(x);xe = max(x);yb = min(y);ye = max(y);zb = min(z);ze = max(z);sb = min(s);se = max(s);x1 = linspace(xb, xe, 30);y1 = linspace(yb, ye, 30);z1 = linspace(zb, ze, 30);s0 = linspace(sb, se, 30);% 对有效数据分割[x1 y1 z1] = meshgrid(x1, y1, z1);% 生成网格数据点s1 = zeros(size(x1, 1), size(x1, 2));for i = 1 : size(s1, 1)s1(i, :) = s0;endst = zeros(size(x1, 1), size(x1, 2), size(x1, 3));for i = 1 : size(st, 3)st(:, :, i) = s1;ends1 = st;% 构造第四维数据s1figure;hold on;view(3);slice(x1, y1, z1, s1, x, [], []);这样就做出来所谓的截面图这个是通过slice(x1, y1, z1, s1, x, y, []);来做的,但没有颜色值设置选项;close all;clc;clear;A = [1 2 2 251 3 3 211 4 4 202 5 5 192 6 7 31];x = A(:, 1)';y = A(:, 2)';z = A(:, 3)';s = A(:, 4)';% 对有效数据分割xb = min(x);xe = max(x);yb = min(y);ye = max(y);zb = min(z);ze = max(z);y1 = linspace(yb, ye, 30);z1 = linspace(zb, ze, 30);x1 = ones(size(y1, 1), size(y1, 2)) * x(1);[x1, y1] = meshgrid(x1, y1);z = zeros(length(z1));for i = 1 : size(z, 1)z(i, :) = z1;endsurf(x1, y1, z);% 这个时候产生了对应于x1的网格截面图,下面来定颜色[a, b] = size(z);rgb = ones(a, b);len = length(s)+1;slic = floor(linspace(1, a, len));for i = 1 : length(slic)-1rgb(slic(i):slic(i+1)-1, :) = rgb(slic(i):slic(i+1)-1, :)*s(i);end% 产生颜色值figure;surf(x1, y1, z, rgb);这个是设置了颜色的图。
Matlab画图,以时间为横坐标的画法.可以先将时间转化为小数,再显示成时间。
考虑使用Matlab分两步实现:1)将时间转换为小数作图;2)将小数重新映射为时刻充当横坐标。
主要需用到datenum和datetick两个函数。
x = datenum(Y, M,D,H, MN,S)datenum可以提取时间数据,也即上文提到的第一步.括号中的参数依次为year,month,day,hour, minute, second.本例中时间仅含小时和分钟,故将其他参数设为0。
Dateaxis(tickaxis,dateform)Dateaxis将坐标采用时间标刻,也即第二步.tickaxis默认为’x’,dateform为时刻格式,可为字符串或对应的数字。
详见MATLAB帮助文档(或见图Dateform)。
代码如下:%以时间为横坐标作图Temp=load(’D:\temperature。
txt');Time=importdata('D:\time.txt’);%文本格式为时分,如13:00 Hour=Time(:,1);Minute=Time(:,2);interval=datenum(0,0,0,Hour,Minute,0);plot(interval,Temp,’—-bd’, 'LineWidth',2,'MarkerFaceColor',’r’); axis([0 1 0 160]);%设置坐标区间title(’temp。
VS time’);xlabel('time’);ylabel(’temp /℃'); x=interval;datetick(’x’,’HH:MM');%需用x作为数组变量图例为某浇注过程的温度控制曲线。
y = rand(1,3)plot(1:3,y)str ={ ’2009—5—7' ’2009-5-9' '2009—5-11' };set(gca,’XTick’,1:3)set(gca,’XTickLabel’,str)t = linspace(datenum(’6—26'),datenum('7-25’),6);plot(t,rand(size(t)));datetick('x’,'mmm.dd',’keepticks')Standard MATLAB Date Format Definitionsdateform (number)dateform (string)Example0’dd-mmm—yyyyHH:MM:SS'01-Mar-2000 15:45:171'dd—mmm—yyyy'01—Mar—2000 2’mm/dd/yy’03/01/003'mmm’Mar4'm’M。
03 函数作图1 平面图形(1)竖直条形图调用格式为:bar(x,y)(2)用描点法绘制函数y f ( x) 随x 从a 到b 间的图形.调用格式为:x=a:h:b ;y=f(x) ;plot(x,y)(3)在同一坐标系下绘制多个函数图形.调用格式为:x=a:h:b ;plot(x,y1,x,y2,…)(4)绘制函数y=f(x)随x 从a 到b 间的图形.调用格式为:explo t(‘f(x)’, [a,b])(5)x 从xa 到xb和y 从ya到yb间隐函数 f ( x, y) 0 的图形.调用格式为:ezplo t(‘x’,’y’,[xa, x b , y a , y b ])(6)绘制t 从ta 到tb间参数方程x x(t ),y y(t )的函数图形.调用格式为:ezplo t(‘x’,’y’,[ta, t b ])(7)在一坐标系下可以绘制一个或多个显函数图形,对变化剧烈的函数,用此命令来进行较精确的绘画.调用格式为:fplot(’fun(x)’,[a,b])fplo t (‘[f1(x),f2(x),…]’,[a,b])其中fun(x)可以是自定义函数,[f1(x),f2(x),…]是函数组.(8)绘制散点图.调用格式为:scatter(x,y)2 空间图形(1)空间曲线.调用格式为:plot3(x,y,z)(2)产生一个以向量x 为行,向量y 为列的矩阵.调用格式为:meshgrid(x,y)(3)空间曲面.调用格式为:surf(x,y,z)(4)网格曲面.调用格式为:mesh(x,y,z)例 1 一次考试成绩0~10 分有0 人,10~20 分有0 人,20~30 分1 人,30~40 分有1 人,50~60 分有2 人,60~70 分有18 人,70~80 分有20 人,80~90 分有9 人,90~100 分有6 人.绘出成绩分析竖直条形图.【matlab 命令】>> x=0:10:90;>> y=[0,0,1,1,0,2,18,20,9,6];>> bar(x,y)【输出结果】20002图1例1输出图像例 2 绘制显函数图形.x(1)设 y 1x 3 2x , y2000 cos2sin x请分别作出这两个函数在区间 x[20,40] 的图像,然后将它们的图像在一个平面直角坐标系中,并判断方程 y 1x 3 2 x 1500cos x2sin x 有几个实数解.(2)在 x[0,4] 上画出分段函数方法一:【matlab 命令】>> x=-20:0.1:40;>> y1=x.^3-35*x.^2+100*x+1500; >> y2=2000*(cos(x/2)-sin(x)); >> figure(1)>> plot(x,y1,'b-'); >> figure(2) >> plot(x,y2,'k');f ( x )32 x 2x 20 x 2 x 2的图像>> figure(3)>> plot(x,y1,'b-',x,y2,'k')【输出结果】图2例2(1)函数y1图3 例 2(1)函数 y 2 输出图像图4例 2(1)函数 y 1 和 y 2 输出图像 从图中知:有 7 个交点,也就是有 7 个实数根.说明:绘制图形着色时,g 表示绿色,r 表示红色,b 表示蓝色,k 表示黑色.方法二:【matlab 命令2】%自定义函数M文件fx1 function y1=fx1(x)y1=x^3-35*x.^2+100*x+1500%自定义函数M文件fx2 function y2=fx2(x)y2=2000*(cos(x/2)-sin(x));Matlab命令窗口输入以下命令: >> figure(1)>> fplot('fx1(x)',[-20,40]); >> figure(2)>> fplot('fx2(x)',[-20,40]); >> figure(3)>> fplot('[fx1(x) , fx2(x)] ', [-20,40]); 【输出结果2】结果同上.【matlab 命令3】>> x=0:0.01:2;>> y=(2*x-x.^2).^(1/3);>> plot(x,y,'k','linewidth',2)>> hold on>> x=2:0.01:4;>> y=x-2;>> plot(x,y,'k','linewidth',2)【输出结果3】图5例2(2)函数f(x)的输出图像例3绘制隐函数和参数方程所确定函数的图形.(1)在x [3,3] 上画隐函数x 2 2 9 的图像.(2)在t [0,2] 上画参数方程x cos3 t ,y sin 3 t 的图像.【matlab 命令1】>> ezplot('x^2+y^2-9',[-3,3])>> axis equal【输出结果1】图6例3(1)输出图像说明:axis on 显示坐标轴,axis off 取消坐标轴,grid on 表示加网格线,grid off 表示不加网格线,clf 清楚图形窗口中的图形.也可以通过编辑图像的方法改变或增加设置,比如在图形窗口中,菜单栏Tools中鼠标选中Edit-Plot,可改变图像的颜色.【matlab 命令2】>> ezplot('cos(t)^3','sin(t)^3',[0,2*pi])【输出结果2】图7例3(2)输出图像例4将图4,5,6,7在同一个图形窗口表现出来.【matlab 命令】clfsubplot(2,2,1)x=-20:0.1:40;y1=x.^3-35*x.^2+100*x+1500;y2=2000*(cos(x/2)-sin(x));plot(x,y1,'b-',x,y2,'k');subplot(2,2,2)x=0:0.01:2;y=(2*x-x.^2).^(1/3);plot(x,y) holdon x=2:0.01:4;y=x-2;plot(x,y)subplot(2,2,3)ezplot('x^2+y^2-9',[-3,3])axis equal subplot(2,2,4)ezplot('cos(t)^3','sin(t)^3',[0,2*pi])【输出结果】图8 例4输出图像例5已知平面内8个散点的坐标(1,15,2,20(3,27(4,36(5,49,(6,65(7,87(8,117,在直角坐标系中绘制点图.【matlab 命令】 clf x=1:8; y=[15.3,20.5,27.4,36.6,49.1,65.6,87.8,117.6]; scatter(x,y,'ko') 【输出结果】图9例6 在区间[0,10] 上画出参数曲线x sin t, y cos t, z t .【matlab 命令】clft=0:pi/50:10*pi;plot3(sin(t),cos(t),t)【输出结果】图10例7画函数Z ( X Y) 2 的图形.【matlab 命令】clfx=-3:0.1:3; y=1:0.1:5;[X,Y]=meshgrid(x,y);Z=(X+Y).^2;surf(X,Y,Z)shading flat【输出结果】图11例8画出马鞍曲面Z X 2 Y2 在不同视角的网格图.【matlab 命令】clfx=-3:0.1:3; y=1:0.1:5;[X,Y]=meshgrid(x,y);Z=X.^2-Y.^2;mesh(X,Y,Z)【输出结果】图123 习题1.某城市一年12个月的日平均气温(单位: 0C )分别为:-10,-6,5,10,20,25,30,24,22,19,10,6,试画出条形图. 2.作出函数 f ( x )cos(e x ) e x / 2) 在区间 x [4,4] 的图形3.作隐函数 sin( xy ) 0 在 [6,6] 内的图形.cos x 2 x 2 4.已知分段函数 y x x 1 ,作出 15 x 15 的函数图形. 2 sin( x 1) 1x 15.在同一直角坐标系中,作出函数 y5 的图形和函数 x 3 的图形.6.已知sin( x 2 2 )7.绘制空间图形:(墨西哥帽子).x 2 2。
freexyn编程实例视频教程系列31 Matlab作图与动画(绘图)31.0概述1.主要内容1.1 运用Matlab进行作图/数据可视化/动画1.2通过编程实例体会运用Matlab进行作图的思路作者:freexyn31.1 plot基本用法1.随机实例,基本绘图用法2.认识函数plot31.2 线型、标记和颜色1.随机实例,演示作图线型、标记和颜色。
2.说明线型:- -- : -.标记:o + * . x s d ^ v > < p h颜色:y m c r g b w k31.3 标题、标签和图例1.随机实例,演示图像上添加标题、标签和图例。
2.认识函数titlexlabelylabellegend作者:freexyn3.说明\alphaα\upsilonυ\sim~ \angle∠\phiφ\leq≤\ast*\chiχ\infty∞\betaβ\psiψ\clubsuit♣\gammaγ\omegaω\diamondsuit♦\deltaδ\GammaΓ\heartsuit♥\epsilonϵ\DeltaΔ\spadesuit♠\zetaζ\ThetaΘ\leftrightarrow↔\etaη\LambdaΛ\leftarrow←\thetaθ\XiΞ\Leftarrow⇐\varthetaϑ\PiΠ\uparrow↑\iotaι\SigmaΣ\rightarrow→\kappaκ\Upsilonϒ\Rightarrow⇒\lambdaλ\PhiΦ\downarrow↓\muµ\PsiΨ\circº\nuν\OmegaΩ\pm±\xiξ\forall∀\geq≥\piπ\exists∃\propto∝\rhoρ\ni∍\partial∂\sigmaσ\cong≅\bullet•\varsigmaς\approx≈\div÷\tauτ\Reℜ\neq≠\equiv≡\oplus⊕\alephℵ\Imℑ\cup∪\wp℘\otimes⊗\subseteq⊆\oslash∅\cap∩\in∈\supseteq⊇\supset⊃\lceil⌈\subset⊂\int∫\cdot·\oο\rfloor⌋\neg¬\nabla∇\lfloor⌊\times x \ldots... \perp⊥\surd√\prime´\wedge∧\varpiϖ\0∅\rceil⌉\rangle〉\mid| \vee∨\langle〈\copyright©31.4多图、子图和网格1.随机实例,演示创建多图、子图和显示网格。
Matlab绘图基础——其他三维图形(绘制填充的五⾓星)其他三维图形%绘制魔⽅阵的三维条形图subplot(2,2,1);bar3(magic(4));%以三维杆图形式绘制曲线y=2sin(x)subplot(2,2,2);y=2*sin(0:pi/10:2*pi);stem3(y);%已知x=[2347,1827,2043,3025],绘制饼图subplot(2,2,3);pie3([2347,1827,2043,3025]);%⽤随机的顶点坐标值画出2个黄⾊三⾓形subplot(2,2,4);fill3(rand(3,2),rand(3,2),rand(3,2), 'y' );%fill3函数等效于⼆维函数fill,可在三维空间内绘制出_填充多边形_%格式:fill3(x,y,z,c)应⽤⽰例:例⼀:统计灰度图⽚的“灰度频率直⽅图”和“累计直⽅图”A = imread('pout.tif') ; %读取⼀个内置图⽚%%内置图⽚放在……MATLAB\R2010*\toolbox\images\imdataA = A(:)';count0=zeros(1,256); %设置矩阵⼤⼩for x=1:length(A),count0(A(x)+1)=count0(A(x)+1)+1;end%各灰度级像素个数P=count0/length(A); %频率stem(P,'Marker','none'); axis tight; %作图显⽰频率直⽅图Hp=P;for i=2:256,Hp(i)=P(i)+Hp(i-1);end%累计直⽅图stem(Hp,'Marker','none'); axis tight; %作图显⽰例⼆:绘制填充空间五⾓星%%%⽅法⼀t=1:2:11;x = sin(0.4*t*pi); %五⾓星嘛!六⾓星可以除以6y = cos(0.4*t*pi);z=0.5*x+0.3*y; %放置到三维空间中,这是该五⾓星所在的三维平⾯函数fill3(x,y,z,'r')xlabel('x');ylabel('y');zlabel('z');haxes = gca; axis square;box on;set(haxes,'xticklabel','','yticklabel','','zticklabel','') %移除原图坐标轴轴的标注%注意fill是顺时针⽅向的,所以五⾓星闭合后,中间的五边形并没有填充%%地图多边形⽮量化你懂得hold on; %填充五边形t=1:2:11;x=cos(0.4*pi)/cos(0.2*pi)*sin(0.2*t*pi);y=cos(0.4*pi)/cos(0.2*pi)*cos(0.2*t*pi);z=0.5*x+0.3*y;fill3(x,y,z,'r','EdgeColor','r'); %将五边形的边界颜⾊设置为红⾊%%%显⽰五⾓星所在的边界⼀个圆圈t=1:0.1:11;x = cos(0.4*t*pi);y = sin(0.4*t*pi);z=0.5*x+0.3*y;plot3(x,y,z);hold off;%%%⽅法⼆i=1;for ag=0.2*pi:0.2*pi:2.2*piif mod(i,2)==1 %i是奇数,长边,按照长边的计算公式x(i) = sin(ag); %五⾓星嘛!六⾓星可以除以6y(i) = cos(ag);else%i是偶数,短边,按照短边的计算公式x(i)=cos(0.4*pi)/cos(0.2*pi)*sin(ag);y(i)=cos(0.4*pi)/cos(0.2*pi)*cos(ag);endi=i+1;end;clear i ag;z=0.5*x+0.3*y;fill3(x,y,z,'r','EdgeColor','r');xlabel('x');ylabel('y');zlabel('z');haxes = gca; axis square;box on;set(haxes,'xticklabel','','yticklabel','','zticklabel','')。
Matlab的函数绘图功能应该是所有数值分析软件中最出色的,在自己的网页中加入Matlab图形,不仅可以使自己的网页显得很酷很炫,而且可以使自己的网页非常专业,尤其适合发表论文时作为引用的验证系统的网站,同时网页上的Matlab图形还允许用户和图形之间做高效的互动。
本文的基础建立在你已经知道如何对Matlab库函数或者是手动编写的函数打jar包,并在一般java应用程序中调用。
本文将主要讲解如何部署包含有定制Matlab图形的网站,所采用的基本工具是MatlabR2010b(注意,更低版本的Matlab可能不具备打jar包的功能),Tomcat6,其他工具有MyEclipse。
本文将尽量以最浅显易懂的方式介绍在网页中加入Matlab图形的方法。
使用java在网页中加入Matlab图形有三种方式:1、使用servlet返回的HTML字符串将Matlab图形嵌入网页;2、直接使用JSP中的WebFigure标签;3、使用中间件将整个Matlab图形嵌入网页,包括其功能和操作。
本文将只介绍第二种方法。
1 Matlab函数编写首先确定返回WebFigure的Matlab函数的基本形式如下:function [result1 result2] = getfigure(parameter1, parameter2) f = figure('Visible','off'); %建立一个Figure. 生成函数图形的代码,插入到f中去; result1 = webfigure(f); %将Figure转换为WebFigure并返回 close(f); %将原始Figure f关闭end使用Matlab编译器将上述函数打成jar包,在编译之前最好在Matlab窗口中测试一下这个函数,以保证其可以返回期望的结果,为了看到图形可以将close(f)语句暂时注释掉。
2 Web工程的配置2.1 工程结构基本结构如下:Webroot--WEB-INFweb.xmlwebfigures.tld--classesyourservlet.class--libjavabuilder.jaryourmatlabclass.jaryourindex.jspyourindex.html对于tomcat来说,直接将此目录copy到其webapps目录下就可以完成部署,但作者还是建议在MyEclipse 中将此工程目录打成war包后,在tomcat的manage窗口中完成部署。