自学2 MATLAB图形处理

例2-1 画sin函数图像

x=0:0.01:10;
y=sin(x);
h=figure(1);
plot(x,y);

例2-2 把好几个图分块儿放一个窗口

x=(0:0.01:2)*pi;
y1=sin(x);
y2=sin(2*x);
y3=sin(3*x);
y4=sin(4*x);
a=subplot(2,2,1);plot(x,y1)
a=subplot(2,2,2);plot(x,y2)
a=subplot(2,2,3);plot(x,y3)
a=subplot(2,2,4);plot(x,y4)

获取图形数据

[x,y]=ginput  %函数获得任意个数的输入点,直到用户按下回车键为止并返回这n个点的相应的坐标向量x、y
[x,y]=ginput(n)   %获得n个数


直角坐标系作图

plot(x,y)
plot(x,y,s)    %s是格式
plot(x1,y1,s1,x2,y2,s2..)    %绘制数据x1-y1,x2-y2,..对应的图形

%s的部分格式
%b 蓝色   c 青色   g 绿色   k 黑色   m 洋红色   r 红色   w 白色   y 黄色   
%- 实线   :点线   -.点划线   --虚线
%. 点号    o 圆圈号  x 叉号   + 十字形号   * 星号   s 方块号   d 钻石形号
%p 五角星号   h 六角星号   V 顶点向下的三角形   < 顶点向左的三角形     > 右  ^ 上

例2-3 画图

x=[1.2 7.0 3.6 5.0 8.0];
y=[4.1 5.2 6.3 9.0 15.0];
z=[11.1 15.2 16.3 19.0 25.0];
a=subplot(1,2,1);plot(x,y)
a=subplot(1,2,2);plot3(x,y,z)

对数坐标系作图

loglog(x,y), loglog(x,y,s),  loglog(x1,y1,s1,x2,y2,s2,..),     %横纵坐标都取对数
semilogx(x,y), semilogx(x,y), semilogx(x1,y1,s1,x2,y2,s2,..),  %横坐标取对数
semilogy(x,y), semilogy(x,y), semilogy(x1,y1,s1,x2,y2,s2,..)   %纵坐标取对数


极坐标系作图

polar(theta,r), polar(theta,r,s), polar(theta1,r1,s1,theta2,r2,s2,..)
polar(theta,r,s)


例2-4 画图

a=2;                              %参数a取2
theta=(0:0.01:4)*pi;              %计算角度
r=a*cos(3*theta);                 %计算极径
subplot(1,2,1);polar(theta,r);    %在极坐标系中绘制三叶玫瑰线
[x,y]=pol2cart(theta,r);          %将极坐标数据转化为直角坐标系数据
subplot(1,2,2);plot(x,y);         %在直角坐标系中绘制三叶玫瑰线
axis equal;                       %坐标轴纵横比例尺相同

%双轴图
[haxes,hline1,hline2]=plotyy(x1,y1,x2,y2,m1,m2)
%其它图形
bar(x)          %绘制矩阵x的条形图
bar(y,x)        %y横坐标,x纵坐标,条形图
bar3(x)        %三维条形图
bar3(y,x)
pie(x)   %饼图
pie3(x)  %三维饼图
stem(x)  %针状图
stem3(x)
quiver(x,y,u,v)      %绘制向量场图,点(x,y)处的箭头由分量(u,v)定义
quiver(x,y,u,v,s)    %s是线型
feather(u,v)          %绘制向量沿横轴等距离分布的羽状图,箭头大小由(u,v)定义
compass(u,v)       %绘制箭头发自圆心的罗盘图
rose(thera)           %绘制玫瑰花图,theta为每个花瓣的角度(弧度)
contour(Z,n)         %绘制矩阵Z的等值线图,n为等值水平数
contourf(Z,n)        %等值区域是被填充的
area(x,y)              %绘制数据(x,y)的面积图,用法与plot类似,但数值y区域被填充
hist(y)                  %绘制关于数据y的柱状图
gplot(A,C)            %绘制数据(A,C)的拓扑图,A为邻接矩阵,C为A的相配矩阵
stairs(x)               %x的阶梯图
errorbar(x,y,1)     %y对x的误差条形图,长度为1的误差条对称地分布在y的上下方
comet(x,y)           %y对x的彗星图


例2-5 画图

theta=10*rand(1,50);          %确定50个随机数theta 
Z=peaks;                      %确定Z为峰值函数peaks
x=0:0.01:2*pi; y=sin(x);      
t=randn(1000,1);              
subplot(2,2,1),rose(theta);
subplot(2,2,2),area(x,y);
subplot(2,2,3),contour(Z);
subplot(2,2,4),hist(t);

平面作图

fplot(fun,lims,tol,n,p1,p2,..)
ezplot(fun,lims,fig)

lims是作图区间    lims=[xmin xmax ymin ymax]
tol是相对误差,有默认值
n是作图点数
p1,p2是函数fun的参数

clf                %清除当前图形
subplot(2,2,1),fplot('sin(x)',[0 2*pi]);
subplot(2,2,2),fplot('sin(x)',[pi 3*pi]);
subplot(2,2,3),fplot('sin(x)',pi*[-1 1 -1 1]);
subplot(2,2,4),fplot('sin(x)',[0 2*pi],1e-3);

三维作图
[x y]=meshgrid(x,y)      %m个数据的x,n个数据的y,生成m*n个数据的新矩阵
mesh(x,y,z)                  %三维网格表面
surf(x,y,z)                     %三维曲面
meshc(x,y,z)                %三维网格表面,在网线图下添加等值线
surfc(x,y,z)             
meshz(x,y,z)                %三维网格表面,在网线图下添加零平面

例2-7 三维作图

x=-5:0.1:5; y=-4:0.1:4;
[x,y]=meshgrid(x,y);
z=0.5*x.^3+y.^2;
subplot(2,2,1);mesh(x,y,z);
subplot(2,2,2);surf(x,y,z);
subplot(2,2,3);meshc(x,y,z);
subplot(2,2,4);surfc(x,y,z);

cla                %清除当前坐标轴
clf                 %清除当前坐标轴
axis(lims)     %坐标轴范围
grid on         %增加网格线
grid off         %删除
legend(str1,str2,..,k)   %在原来的图上,增加图例
legend off     %删除
title()
xlabel()
ylabel()
zlabel()

text(x,y,str)    %在位置(x,y)处增加文本str
gtext(str)       %在鼠标位置处增加文本str

hold on
hold off


例2-8 画图,将两个函数图显示在一张图上

x=(0:0.01:2)*pi;y1=sin(x);y2=cos(x);
plot(x,y1,'r-');                         %红色实线
hold on;                                 %保持曲线,以便画下一个曲线
plot(x,y2,'b--');                        %蓝色虚线
grid on;                                 %加网格
legend('正弦曲线','余弦曲线',1);          %设置不同曲线的图例
xlabel('hengzhou');
ylabel('zongzhou');

%声音与动画
sound(y), sound(y,f)    %将向量y传送至扬声器,f为采样频率

例2-9

%以20000Hz制作并播放余弦曲线形式的声音
x=cos(linspace(0,10000,20000));
sound(x);

动画的实现

M=getframe,M=getframe(p),M=getframe(p,r)   %getframe 获得当前图形窗口中的画面  p 对象句柄     r图形对象矩形区域
% r=[left bottom width height]  矩形区域左下角的横纵坐标、矩形区域的宽度和高度
movie(M,k)    %movie 播放动画    M已有动画帧矩阵   k重复播放次数

例2-10

s=0.2;x1=0;                
nframes=50;                %动画总帧数
for k=1:nframes            
    x1=x1+s;               %确定画图时横坐标终止值
    x=0:0.01:x1;           
    y=sin(x);
    plot(x,y);
    axis([0 2*pi -1 1])     %坐标轴
    grid off                %加网格线
    M(k)=getframe;          %将当前图形存入矩阵
end
movie(M,3)                  %重复3次播放动画M

图形用户界面

Menu Editor     %设置菜单的

position            %窗口位置,前后两个数值分别为窗口矩阵左下角和右上角的横纵坐标
Name               %窗口标题栏对应的字符串
NumberTitle     %on显示窗口编号    off不显示
Resize             %窗口大小是否可调整
Visible             %窗口是否可见


例2-11 gui窗口,创建菜单

%gui窗口,创建菜单
h=figure;
set(h,'Position',[100 150 500 400],'Menubar','figure','Name','可视化编程','NumberTitle','off')
h1=uimenu(h,'Label','输入一般资料');
h11=uimenu(h1,'Label','输入基础资料');

例2-12

dlg_title='输入参数对话框';               %设置对话框标题
num_lines=1;                             %参数输入行数
p1='输入参数1';
p2='输入参数2';
p3='输入参数3';
p={p1,p2,p3};                            %参数输入说明
def={'1.2','2.5','4.1'};                 %设置输入参数默认值
g=inputdlg(p,dlg_title,num_lines,def);   %设置对话框并获取数据g
F1=str2num(char(g(1)));                  %将细胞数据g(1)转化为数值F1
F2=str2num(char(g(2)));
F3=str2num(char(g(3)));
F=[F1,F2,F3]                             %显示获得的数据

例2-13 控件

%控件
h=figure;
set(h,'Position',[100 150 500 400],'Menubar','figure','Name','可视化编程','NumberTitle','off')
h1=uicontrol(h,'Style','text','Position',[100 150 80 20],'String','基础长度');

例2-14

h=figure;
set(h,'Position',[100 150 500 400],'Menubar','figure','Name','可视化编程','NumberTitle','off')
axes('Position',[0.1 0.7 0.8 0.2])
x=0:0.01:2*pi;
y=sin(x);
plot(x,y);

图形用户界面的可视化编程,步骤:

1.进入gui界面
2.添加图形对象
3.修改菜单属性
4.修改图形对象属性
5.编辑回调函数或命令
6.另存为图形文件
7.打开图形文件,对有关对象属性进行修改


% H=findobj(图形对象句柄,属性,属性值)
% 图形对象句柄可以是gcbf(获得具有返回控制的当前图形句柄)、gcbo(获得具有返回控制的当前对象句柄)、
% gco(获得当前对象句柄)、gcf(获得当前图形句柄)、gca(获得当前坐标轴对象句柄)
%p=get(Hf_1,'position')   返回具有句柄Hf_1图形窗口的位置向量


可视化编程(gui)

%步骤(按照步骤一步一步来!)
gui部分

%1. 进行可视化编程
%1.1 在MATLAB命令窗口输入guide
%1.2 新建空白gui窗口
%1.3 把左边面板中的‘Edit Text’拖进来
    %双击该按钮,在新的对话框中‘Style’后的选择框中选择‘edit’
    %在‘Tag’后的编辑框输入‘edit1’,‘String’后输入空白
%1.4 把左边面板中的‘Edit Text’拖进来(第二个)
    %双击该按钮,在新的对话框中‘Style’后的选择框中选择‘edit’
    %在‘Tag’后的编辑框输入‘edit2’,‘String’后输入空白
%1.5 拖入‘Radio Button’,双击该按钮
    %‘string’后输入‘确认’,‘style’后选择‘radiobutton’
    %‘callback’后选择‘c02_15’
%1.6 把左边面板中的‘Edit Text’拖进来(第三个)
    %双击该按钮,在新的对话框中‘Style’后的选择框中选择‘edit’
    %在‘Tag’后的编辑框输入‘edit3’,‘String’后输入空白

c02_15.m文件部分

%获得计算数据
H1=findobj(gcbf,'tag','edit1');    %找H1
n1=get(H1,'string');               %获字符串n1
N1=eval(n1);                       %将字符串转化为数值
H2=findobj(gcbf,'tag','edit2');
n2=get(H2,'string');
N2=eval(n2);
%进行数学计算
N3=N1*N2;
%界面显示数学计算结果
H3=findobj(gcbf,'tag','edit3');
n3=num2str(N3);
set(H3,'string',n3);               %将字符串赋予控件

实现可视化应用程序

%回到可视化编程界面
%文件另存为c02_16

运行gui文件,成功~

你可能感兴趣的:(matlab,线性代数,矩阵)