目录
一、绘制二维曲线
二、极坐标与复平面坐标绘图
三、绘制三维图形
四、绘制统计图形
五、简易绘图方法
六、图像处理介绍
一、绘制二维曲线
多项式拟合
polyfit(x,y,n):用n次多项式拟合x与y
x=0:0.1:pi;
y1=sin(x);
plot(x,y1,'LineWidth',8); %绘制sin(x)的曲线(看备注)
hold on; %不停笔,在原图上继续用plot画图
p=polyfit(x,y1,5); %将x,y关系用5次多项式拟合
y2=polyval(p,x); %polyval:求出多项式p在x处的拟合值,相当于p(x)
plot(x,y2,'r-','LineWidth',2); %画拟合多项式曲线
legend('\bfsin','\bfpoly'); %做标记, \bf -- Bold font粗体
regress函数
-
B = regress(Y,X)
-
[B,BINT] = regress(Y,X)
-
[B,BINT,R] = regress(Y,X
-
[B,BINT,R,RINT] = regress(Y,X)
-
[B,BINT,R,RINT,STATS] = regress(Y,X)
参数解释:
-
B:回归系数,是个向量(“the vector B of regression coefficients in the linear
model Y = X*B”)。 -
BINT:回归系数的区间估计(“a matrix BINT of 95% confidence intervals for B”)。
-
R:残差( “a vector R of residuals”)。
-
RINT:置信区间(“a matrix RINT of intervals that can be used to diagnose
outliers”)。 -
STATS:用于检验回归模型的统计量。有4个数值:判定系数R^2,F统计量观测值,检验的p的值,误差方差的估计。
-
ALPHA:显著性水平(缺少时为默认值0.05)。
举例:
目标函数:y=Ax12+Bx12+Cx1+Dx2+Ex1*x2+F
(这是一个二次函数,两个变量,大写的字母是常数)
%导入数据
y=[7613.51 7850.91 8381.86 9142.81 10813.6 8631.43 8124.94 9429.79 10230.81
... 10163.61 9737.56 8561.06 7781.82 7110.97]';
x1=[7666 7704 8148 8571 8679 7704 6471 5870 5289 3815 3335 2927 2758 2591]';
x2=[16.22 16.85 17.93 17.28 17.23 17 19 18.22 16.3 13.37 11.62 10.36 9.83 9.25]';
X=[ones(size(y)) x1.^2 x2.^2 x1 x2 x1.*x2];
%开始分析
[b,bint,r,rint,stats] = regress(y,X);
结果截图:
b为对应的参数 b(1)为F(最后那个常数项) ,b(2)为A(第一个参数),b(3)为B,b(4)为C,b(4)为D,b(5)为E。
绘图相关函数
-
figure:新建绘图窗口
– h=figure:新建窗口,返回窗口的句柄h -
axes:新建坐标系
– h=axes:新建坐标系,返回其句柄h -
set(句柄, 属性名, 属性值)
– 设置对象的属性: -
变量=get(句柄, 属性名)
– 取得对象的属性: -
另法:先绘图,再在图形窗口中,找到菜单:edit-> Axes Properties,坐标系下方property Editor中点击Inspector…按钮,打开Property Inspector窗口,左/右是属性名/值
-
xlabel(标签):x轴标签
-
ylabel(标签):y轴标签
-
title(标题):图像标题
-
legend(曲线1名,曲线2名,…):给曲线加标注
-
grid on/off:加/去网格
-
box on/off:加/去外框
-
text(x,y,字符串):在指定位置加上文字
-
可使用特殊文字: \leftarrow, \rightarrow, \pi
举例:
例题1:
要求:X: -3pi~3pi,
背景黄色,
y轴有网格,
曲线8点宽、红色,
x=pi/2处作标记
x1=(-3:0.01:-0.01)*pi;
x2=(0.01:0.01:3)*pi;
x=[x1,0,x2];
y=[sin(x1)./x1,1,sin(x2)./x2];
h1=plot(x,y);
set(h1,'LineWidth',8);
set(h1,'Color','red');
h2=gca; %gca=get current axes=取当前坐标系的句柄
set(h2,'XGrid','off');
set(h2,'YGrid','on');
h3=get(h2,'Parent'); %父对象:包含它对象:包含坐标的对象就是窗口
set(h3,'Color','Yellow'); %窗口为黄色:窗口上坐标系:默认白色底
text(pi/2,2/pi,'\leftarrow sinc(x)','FontSize',20);
例题2:
x=0:0.01:4;
y1=cos(2.^x)-0.5; y2=sin(4*x);
figure;
plot(x,y1,x,y2,'r--');
% gca: 获得当前坐标轴句柄
set(gca,'YTick',-1.5:0.25:1);
xlabel('输入'); ylabel('输出');
title('我的曲线图!');
legend('y1=cos(2.^x)-0.5', 'y2=sin(x*4)');
grid on;
scatter函数:散点图
x=[2,3,4,5,7,8,10,11,14,15,18,19]';
y=[106.42,109.20,109.58,109.50,110.00,109.93,110.49,110.59,110.60,110.83,111.00,111.20]';
scatter(x,y,'*'); % 实验数据*标记
scatter(x,y)= plot(x,y,‘o’)
scatter(x,y,’’) = plot (x,y,’’)
x=[2,3,4,5,7,8,10,11,14,15,18,19]';
y=[106.42,109.20,109.58,109.50,110.00,109.93,110.49,110.59,110.60,110.83,111.00,111.20]';
plot(x,y,'*'); % 实验数据*标记
plot函数
•plot(X,Y)
-
–X,Y为等长n的向量:以(xi,yi)为横、纵坐标描n个点并用直线段连接起来
-
–X为长n向量,Y为行或列数为n矩阵:若Y的另一维为m,则基于(X, Y的等长维向量)绘制m条曲线,每条曲线描n个点
X=n*1向量,Y=n*m矩阵:看待把Y=m个列向量Y1,Y2,Ym 把(X,Y1)画一条曲线 把(X,Y2)画一条曲线 。。。 把(X,Ym)画一条曲线 共画m曲线,一个图上
-
–X,Y同为mxn矩阵:以(X的列向量, Y的列向量)为横、纵坐标绘制n条曲线,每条曲线描m个点
X=n*m矩阵:看待把X=m个列向量X1,X2,Xm, Y=n*m矩阵:看待把Y=m个列向量Y1,Y2,Ym 把(X1,Y1)画一条曲线 把(X2,Y2)画一条曲线 。。。 把(Xm,Ym)画一条曲线 共画m曲线,一个图上
x=0:0.1:4;
y1=0.4+sin(2*x);
y2=sin(x.^2);
figure;
plot(x,y1,'b-h',x,y2,'r--s');
•plot(Y)
- –Y为长n的实向量:=》 plot(1:n’, Y)
- –Y为长n的复向量:=》plot(real(Y), imag(Y))
- –Y为mxn实矩阵:=》plot(1:m’, Y的列向量) :
n条曲线(描m点) - –Y为mxn复矩阵: =》plot(real(Y的列向量), imag(Y的列向量)):
n条曲线(描m点)
•plot(X1, Y1, X2, Y2, …, Xn, Yn)
–调用plot(Xi,Yi)共n次
•plot(…, 点线色的参数设置 , …)
–定义点/线的样式:颜色、形状、大小…
•plot(…, ‘属性名’, 属性值, …)
–属性:属于某个对象的性质
–比如:人的属性有身高、体重、肤色……
–定义曲线的某个属性:名=值
例1
x=0:0.02:8;
y=sin(2*x); % 点函数特别适合生成绘图数据
plot(x,y); % X, Y 为等长的向量
画完图后,可以调整窗口大小,调节图形的大小
编辑->复制图形
word->粘贴
作各种各样的图形修饰
点曲线、坐标系、图形:改曲线、坐标系、图形的属性(参数)
参数设置:手工作,编程作
属性名:Ylim=[-1.1,1.1]
例2
x=0:0.01:8;
y1=x.^2-3*x;
y2=cos(x.^2);
figure;% 新建一个绘图窗口
plot(x,y1,x,y2);
plotyy函数:左右两边都有y-轴
-
plotyy(x1,y1,x2,y2)
– x1,y1用左边y轴刻度
– x2,y2用右边y轴 -
[ax,h1,h2]=plotyy(…)
– ax为向量,其两个元素为左、右两个坐标系的句柄,
– h1/h2为绘制的两条曲线的句柄
x = 0:0.01:20;
y1 = 200*exp(-0.05*x).*sin(x);
y2 = 0.8*exp(-0.5*x).*sin(10*x);
[ax,h1,h2] = plotyy(x,y1,x,y2);
set(get(ax(1),'Ylabel'),'String','左边Y轴');
set(get(ax(2),'Ylabel'),'String','右边Y轴');
对数坐标轴
- semilogx(x,y):x轴刻度用10的幂,y轴正常
- semilogy(x,y):y轴刻度用10的幂,x轴正常
- loglog(x,y):两个坐标轴的刻度用10的幂
比如:10-2与10-1,刻度显示10^-1.9, 10^-1.8, ……, 10^-1.1,所以刻度不均匀
例题:画出y1=lnx+x,y2=x+5 在[10-2,101]中半对数图像。
% x=logspace(-2,1,100);
x=0.01:0.1:10;
y1=x+5;
y2=log(x)+x;
semilogx(x,y1,x,y2);
subplot:画子图(必考)
- 在一张图/窗口中画多个子图
– 把绘图区划分成m行n列个子区域,每个区域都可以放上一张子图
– 子区域按先行后列编号:1 ~ mxn
– 也可以几个相邻区域合并放一张子图 - subplot(m,n,p)
– 以下在编号为p的子区域画图 - subplot(m,n,[p1,p2,…])
–将编号为p1,p2,…的子区域合并,再在这里画图
x=-pi:pi/20:pi; % x=(-1:0.05:1)*pi;
subplot(2,3,1); plot(x,cos(x)); title('1.cos');
subplot(2,3,2); plot(x,sin(x)); title('2.sin');
subplot(2,3,3); plot(x,abs(x)); title('3.abs');
subplot(2,3,4); plot(x,floor(x)); title('4.floor');
subplot(2,3,[5,6]) % 合并5, 6区
plot(x,exp(x)); title('5.exp(x)');
patch:画多边形
- patch(X,Y,C)
– 画一个/多个多边形
– X,Y:定义多边形的顶点
– C:定义颜色
x=[0 1 3 5 6 4 3 0];
y=[1 0 1 0 2 2 3 1];
patch(x,y,'b');
二、极坐标(必考)与复平面坐标绘图
极坐标系
-
直角坐标(x, y)
–当曲线用y=f(x)表达简单时
-
极坐标(ρ, θ):极径、极角
– 当曲线用ρ=f(θ)表达简单时
-
polar(theta,rho):给定(θ,ρ)向量绘图
与plot只是描点的方式不同 -
polar(theta,rho,LineSpec):设置参数
例1
四叶草:
x=0:0.1:2*pi;
polar(x,sin(2*x));
为什么4叶?
θ=x在0~90时,ρ=sin(2x)>0,图在第一象限
θ=x在90~180时,ρ=sin(2x)<0,图在第四象限
任意叶怎么做?
六叶草:
x=0:0.1:4*pi;
polar(x,sin(1.5*x),'r--s');
三、绘制三维图形
plot3:画三维曲线
-
plot3(X1, Y1, Z1, X2, Y2, Z2, …)
– 与plot类似:描点、连线,只多一个维度
t = 0:pi/50:10*pi;
plot3(sin(t),cos(t),t)
grid on
axis square
box on;
text(-1.5,-1.3,0,'螺旋线(helix)');
title('三维曲线绘图举例');
xlabel('sin(x)');ylabel('cos(x)'),zlabel('x');
surf:绘制三维曲面图
- surf(x,y,z)
- 当x,y,z为mxn矩阵时:会在三维坐标系中描出mxn个三维点,然后基于(x,y)、
(x+h,y)、(x,y+h)和(x+h,y+h)四个点作一个小曲面,颜色用这四个点的z值或平均z值来决定 - 当x为n向量,y为m向量,z为mxn矩阵时:将x视为行向量,复制m行,可得到mxn矩阵。同样地,将y视为列向量,复制n列,也得到mxn矩阵。
画球面
[X,Y,Z]=sphere(30); %球半径为1,31x31球面网格
surf(X,Y,Z);
xlabel('x'), ylabel('y'), zlabel('z');
title('半径为1的球面');
画椭球面
clear;
a=2;b=2;c=1;
[x,y,z]=ellipsoid(0,0,0,a,b,c,50);
surf(x,y,z);
axis equal;
xlabel('x');
ylabel('y');
zlabel('z');
mesh: 绘制三维网格曲面图
绘制三维曲面图步骤:
1): 对数据进行处理,得到三维曲面上的点坐标组
方法有:
1、将自变量离散, x=xmin:dx:xmax y=ymin:dy:ymax
2、利用meshgrid 指令 生成 x-y 矩阵
2):利用函数z=f(x,y) 计算函数值
3): 绘图。 mesh: 绘制三维网格曲面图 surf :绘制三维颜色填充图
例1
plot3(x1,y1,z1,S1,x2,y2,z2,S2)
meshgrid
创建网格矩阵原理和方法
如绘制: z=x*exp(-x2-y2) 的图形
% 空间网格绘制;mesh
[x,y]=meshgrid(-2:0.2:2);
z=x.*exp(-x.^2-y.^2);
mesh(x,y,z)
colormap([0 0 1]) % 颜色
view(30,20); % 角度控制
增加代码
meshs(x,y,z)
meshz(x,y,z)
contour 和countour3 :等高线的绘制
- contour(x,y,z):x,y,z与surf/mesh相同:同为mxn矩阵,或n-向量/m-向量/mxn矩阵。
– 等高线的个数与定值由z矩阵确定 - contour(z) == contour(1:n,1:m,z),m/n为z矩阵的行数和列数
- contour(…, n):画n条等高线
- contour(…, v):等高线的高度由向量v给定
- contour3(……):画3维等高线
[x,y]=meshgrid(-2:0.2:2);
z=x.*exp(-x.^2-y.^2);
subplot(1,2,1)
contour(x,y,z,20)
subplot(1,2,2)
contour3(x,y,z,20)
contour3(x,y,z,80);
四、绘制统计图形
bar、bar3d:画条形图
- bar/barh/bar3/bar3h:画垂直、水平、垂直三维、水平三维条形图
- bar(x,Y)
– x,Y同为向量,x递增,在每个x处画一个垂直条
–x递增向量,Y矩阵,在每个x处画多个垂直条 - bar(Y) == bar(1:length(Y), Y)或bar(1:size(Y,1), Y)
- bar(…, n):n为条宽
- bar(…, ‘group’/‘stack’):组合条/堆叠条
例子
某年七月11-15日连续五天的温度数据用矩阵Y表示,行表示日子,列分别为平均温度、最高温度和最低温度
x=11:15;
y=[35 30 42;32 31 45;30 32 41;34 38 42;29 32 43];
bar(x,y);
barh(x,y);
bar3(x,y);
bar3h(x,y);
bar(x,y,‘stack’);
pie:画饼形图
- pie(x,explode,labels);
- pie3(x,explode,labels);
- 从0点钟方向,逆时钟方向绘图
- x为向量(矩阵看成一个列向量)
- explode:与x同长的0/1向量
– 为1的扇区从饼形图中稍稍分离出来一点 - labels:与x同长的细胞,每个元素为一个字符串,作为每个扇区的标签
- x = [2 3 0.5 4.5 8];
- explode = [0 1 0 1 0]; %第2、4扇区分离
pie(x,explode);
pie(x,explode,{'数1','数2','数3','数4','数5'});
pie3(x,explode);
五、简易绘图方
t:一元函数简易绘图
- ezplot(f);
- ezplot(f,[min,max]);
- ezplot(f,[xmin,xmax,ymin,ymax]);
- ezplot(x,y);
- ezplot(x,y,[tmin,tmax]);
- f:y=f(x)显函数,f(x,y)=0定义的隐函数
– 可用字符串定义,也可用函数句柄定义 - x,y:单参数t方程定义的隐函数
默认的x范围:-2pi~2pi
例1
ezplot('x*x');
ezplot('x*x+y*y-1',[-1,1,-1,1]);
ezplot('cos(t)','sin(t)');
例2
fh=@(x,y)(x.^2 + y.^2-1);
ezplot(fh);
例3
ezplot('exp(x)*cos(y)+y^2/(1+cos(x*y))');
colormap([0 0 1]);
ezsurf:二元函数曲面简易绘图
-
ezsurf(f);
-
ezsurf(f,[min,max]);
-
ezsurf(f,[xmin,xmax,ymin,ymax]);
-
f:z=f(x,y)显函数
-
ezsurf(x,y,z);
-
ezsurf(x,y,z,[min,max]);
-
ezsurf(x,y,z,[smin,smax,tmin,tmax]);
-
x,y,z:双参数s,t方程定义的隐函数
-
默认的x,y范围:-2pi~2pi
ezsurf('sqrt(1+x^2+y^2)');
ezsurf('real(atan(x+i*y))');
ezsurfc('y/(1 + x^2 + y^2)',[-5,5,-2*pi,2*pi],35);
ezmesh:二元函数网格简易绘图
- ezmesh(f);
- ezmesh(f,[min,max]);
- ezmesh(f,[xmin,xmax,ymin,ymax]);
- f:z=f(x,y)显函数
- ezmesh(x,y,z);
- ezmesh(x,y,z,[min,max]);
- ezmesh(x,y,z,[smin,smax,tmin,tmax]);
- x,y,z:双参数s,t方程定义的隐函数
- 默认的x,y范围:-2pi~2pi
ezmesh('sqrt(1+x^2+y^2)');