【Matlab9】可视化和GUI



2015年04月16日    Author:Guofei

文章归类: Matlab    文章编号: 11005

版权声明:本文作者是郭飞。转载随意,但需要标明原文链接,并通知本人
原文链接:https://www.guofei.site/2015/04/16/matlab9.html


6. 可视化

6.1 画图

Plot

  • 线形 ```
  • 实线 -. 点画线 – 虚线 : 点线 ```
  • 颜色
    r	红,g	绿,B	蓝,C	蓝绿,M	洋红,Y	黄,K	黑,w	白
    
  • +,o,*,.,X,S	方格,D	菱形,^v<>	三角形(4个方向),P	五边形,h	六边形,
    
  • 其它配置
    'LineWidth' 线宽
    'MarkerEdgecolor' 标记点框色
    'markerfacecolor' 标记点填充色
    'Markersize' 标记点大小
    
  • Axis
  • 范围
    [Xmin,Xmax,Ymin,Ymax]
    auto 自动调整区间
    manual 冻结
    tight用户数据范围为坐标轴范围比例
    
  • 高低长宽
    Equal等比例
    square方形
    normal 自动
    

set:用来改各种配置

set(gca,'xtick',[0:0.5:2])   坐标轴刻度
set(gca,'xticklabel',{'hua','ha','ni','s','r'}) 坐标轴刻度名
set(gca,'FontName','Times New Roman','FontSize',14)设置坐标轴刻度字体名称,大小‘FontWeight’,’bold’ 加粗 ‘FontAngle’,’italic’ 斜体
对字体的设置也可以用在, xlabel, ylabel等中
set(gcf,'toolbar','none')
set(gcf,'color','red')
set(gca,'xcolor','red')
set(gca,'ylim',[ymin,ymax]); %其中ymin,和ymax是y轴刻度的上下限
set(gca,'XLim',[0.01 1000]);%X轴范围
set(gca,'XMinorTick','on');% 小刻度
set(gca,'XTick',[0.01 0.1 1 10 100 1000]);
set(gca,'XGrid','on');  %网格
set(gca,'XMinorGrid','off');%小线网格
cursor on %允许选择数据点
xlabel('dd','rotation',30) %旋转坐标轴名字
text(x,y,'string')%标注点

图例

legend('a','Location','best') 图例位置放在最佳位置
LEGEND(string1,string2,string3, ...)
location后面的属性可以是:。。。

eg:

legend([b,x],'Carrots','Peas','Peppers','Green Beans')%b,x是句柄
Axis on    axis off隐藏坐标轴
Box on    box off 隐藏边界线
semilogx
semilogy
loglog
annotation('arrow',[0.1 0.2],[0.1 0.9])   %画向量看help:line/arrow/doublearrowtextarrow/rectangle/
subplot(2,2,i);plot(,);title(‘标题’);xlaber;ylaber
[AX,H1,H2]=plotyy(X1,Y1,X2,Y2)画双坐标图
AX(1)表示左坐标轴set(AX(1),’xtick’,[])
AX(2)表示右坐标轴
H1 左线set(H1,’linestyle’,’填入线’,’color’,’填入颜色’)
H2 右线

其它绘图

polar(theta,rho) 极坐标绘图
[x,y]=pol2cart(theta,rho)%极坐标转直角坐标
datetick('x','yyyymmdd')   %x轴变日期
hist(x,20)  直方图 20格
b=hist(x,20)  返回每一格的数量
bar(x);bar(x,y); 柱状图
barh垂直柱状图
bar3 bar3h%三维图
pie %饼图
contour(x,y,z,4) %画4条等高线
[c,h]=contour(x,y,z,[4,1.6])% 画指定等高线    clabel(c,h)  %并标注
contourf()%画等高线并涂色
scatter(x,y,s,c)    %类似motion art的散点图
scatter3
stem火柴杆 stem3
compass罗盘图;复数向量图
feather羽毛图;
quiver向量图
[U,V,W]=surfnorm(X,Y,Z)%产生向量数据
quiver3(X,Y,Z,U,V,W,0.3)
comet comet3%彗星图
comet(x,y,p)  x,y是列向量,p是尾巴长度
ribbon%彩带图
stairs
rose
errorbar
area%区域图
convhull%凸包图

三维图:

Plot3(x,y,z);
[X,Y]=meshgrid(x,y);plot3(X,Y,Z)
surf(X,Y,Z)
rotate3d on
mesh     网状图    waterfall(x,y,z);瀑布图 waterfall(x',y',z');  瀑布图(y方向)
meshc(x,y,z);网状图+等高图  meshz 带底座的图   surfc(x,y,z); 曲面图与等高线
contour3(peaks, 20); 曲面在三度空间中的等高线  
contour(peaks, 20); 等高线在XY平面的投影
[C,h]=contour(...)返回等高矩阵C和句柄h
clabel(C)添加等高矩阵标签

网格插值1:

[X,Y]=meshgrid(,)   %x,y,z是非网格数据
Z=griddata(x,y,z,X,Y,’linear’)  %用残缺数据,插值成网格数据’linear’/’cubic’ /’nearest’
mesh(X,Y,Z)

插值2:

[X,Y]=meshgrid(,);
F=TriScatterInterp(x,y,z); Z=F(X,Y);mesh(X,Y,Z)
patch(X,Y,Z,C) 三维板
fill(X,Y,C) 二维板填充
fill3(X,Y,Z,C)三维板
patch的属性:
'XData' 'YData' 'ZData'
vertices faces
marker 'o',linestyle '-.',linewidth线宽,

匿名函数绘图:

ezplot3(funx,funy,funz);ezplot(funx,funy,funz,[tmin,tmax])
ezplot3(…,’animate’)                %动画
ezplot3(axes_handles,…);h=ezplot3(…)

ezmesh(fun,[xmin,xmax,ymin,ymax]);fun(x,y)
ezmesh(funx,funy,funz);参数方程funx(s,t),funy(s,t),funz(s,t)
ezsurf同理

Grid on
Rotate3d on

向量场图:

[X,Y]=meshgrid(-3:0.4:3);Z=-3*X.^2-Y.^2;
[U,V,W]=surfnorm(X,Y,Z);%计算法向量
quiver3(X,Y,Z,U,V,W,0.2)

动画制作: 1、set法 2、Z=peaks

for i=1:20
  surf(sin(i)*Z,Z)
  F(i)=getframe
end
movie(F)

图像存储:

x=1:10;
y=2.*x;
plot(x,y);
result=getframe(gcf);%getframe(gca),movie(result,30)
image(result.cdata);
colormap(result.colormap);
save result;

rotate(h,[0,0,1]),60)沿向量旋转

x = 0:.2:12;
plot(x,bessel(1,x),x,bessel(2,x),x,bessel(3,x));
legend('First','Second','Third');
legend('First','Second','Third','Location','NorthEastOutside')
b = bar(rand(10,5),'stacked'); colormap(summer); hold on
x = plot(1:10,5*rand(10,1),'marker','square','markersize',12,...
        'markeredgecolor','y','markerfacecolor',[.6 0 .6],...
         'linestyle','-','color','r','linewidth',2);
hold off
legend([b,x],'Carrots','Peas','Peppers','Green Beans',...
          'Cucumbers','Eggplant')
text(x,y,'点1')

plotmatrix

6.2 句柄方式

  • gcf :返回当前figure对象的句柄
  • gca:返回当前axes对象的句柄
  • gco:返回当前鼠标点击的句柄
  • shg:把当前窗口放到最前端

关于gcf: figure中有用的属性: Position:位置 CurrentPoint:鼠标位置 Color:颜色 ToolBar,MenuBar:工具栏是否显示, ‘none’

关于gca: axes(axes_handle)%把axes_handle置为当前句柄 axes_handle=axes()%当前figure上建立一个axes

subplot()也是返回gca

axes中有用的属性:

Box:上和右框‘on’,'off'
XGrid,YGrid:网格线‘on’,'off'
XMinorGrid,YMinorGrid:网格线(更密的)‘on’,'off'

Xlim:范围
 XlimMode:自动/手动
XScale:log/linear


Color:颜色
XColor  YColor   ZColor:轴的颜色

Position:在figure中的位置,取值为0~1
OuterPosition:同上,留空白,取值0~1,Position和OuterPosition同时变化

CameraPosition:三维视角

Visible:是否可见

line对象

  • 由plot生成
  • 由polar生成极坐标(实际上是调用了axes和plot)

Text对象

  1. 由text生成
  2. 由title(‘string’)生成,这时是标题
  3. 由xlabel(‘string’)生成,这时是轴标记
  4. 由gtext(‘string’)生成,这时是鼠标互动

颜色,底色,旋转。。。

Legend对象

  • Box
  • Color。。。多种颜色

Bar对象

  • Horizontal:水平放置

6.3 计算几何

点与多边形的包含关系

[in,on]=inpolygon(X,Y,xv,yv)

X,Y:待判断点
xv,yv:多边形顶点
in判断是否在区域内,on判断是否在边界上

矩形的集合运算

rectangle('position',A)%画图
area=rectint(A,B)%算交集面积
A:n*4,B:m*4,一行值为:[x,y,width,height]
area:n*m,
'curvature',[1,i]%i介于0-1,表示边角圆滑化

计算凸包

k=convhull(x,y)%返回编号
n维凸包convhulln(X)

Delaunay剖分

TRI=delaunay(x,y)
triplot(TRI,x,y)
figure
trisurf(TRI,x,y,zeros(size(x)))%三维曲面
figure
trimesh(TRI,x,y,zeros(size(x)))%三维网格

三维Delaunay剖分

T=delaunay3(x,y,z)
%n维
T=delaunayn(X)

最临近搜索

K=dsearch(x,y,TRI,xi,yi)

生成圆柱

% r是母线
[x,y,z]=cylinder(r,5)
mesh(x,y,z)

6.4 gui

常用控件:

  • h=msgbox(‘message’,’title’,icon) %icon可以是none/error/help/warn/custom
  • h=inputdlg(‘message’,’title’,N)%N是行数 h=inputdlg({‘m1’,’m2’},’info’,1,{‘mm’,’nn’})%多输入框
  • h=waitxbar(x,h,’message’)%进度条
  • bu=questdlg(‘内容’,’题目’,’按键1’,’按键2’,’按键1’) %选择对话框
  • 打开文件
    [FileName,PathName] = uigetfile('*.m','Select the M-file');    %打开文件的对话框
    filename = uigetfile
    [FileName,PathName,FilterIndex] = uigetfile(FilterSpec)
    [FileName,PathName,FilterIndex] = uigetfile(FilterSpec,DialogTitle)
    [FileName,PathName,FilterIndex] = uigetfile(FilterSpec,DialogTitle,DefaultName)
    [FileName,PathName,FilterIndex] = uigetfile(...,'MultiSelect',selectmode)%选择多个文件
    
  • uigetdir %打开文件夹
  • uigetpref
  • uiimport%import数据
  • uiload%调用mat
  • uiputfile%保存文件
  • uisave%保存mat
  • c=uisetcolor([r g b])% 选色对话框,默认是[r g b]
  • uisetfont
  • helpdlg%类似msgbox,单多了个图标
  • ButtonName = questdlg(Question, Title, ‘No’)%多按钮对话框 ButtonName = questdlg(Question, Title, Btn1, Btn2, DEFAULT);
    ButtonName = questdlg('What is your favorite color?', ...
                         'Color Question', ...
                         'Red', 'Green', 'Blue', 'Green');
     switch ButtonName,
       case 'Red',
        disp('Your favorite color is Red');
       case 'Blue',
        disp('Your favorite color is Blue.')
        case 'Green',
         disp('Your favorite color is Green.');
     end
    
  • imageview(S)
  • movieview%放动画
  • soundview%放声音

在gui中插入多个图

axes(handles.axes1);  
cla;  

输出鼠标坐标

currPt = get(gca, 'CurrentPoint');
xb = currPt(1,1);
yb = currPt(1,2);

uitable改颜色的一种方法:

<html><BODY bgcolor="green">CSLO</BODY></html>

回调函数

Menu Editor  
Context Editor  

my_gui(varargin):每次触发控件后,此主函数会运行。
varargin包含4个变量:

  • [‘触发控件的回调函数名’,hObject,eventdata,handles]
  • hObject是当前对象的句柄
  • eventdata是附加参数
  • handles,结构体,包含当前gui所有对象的句柄和用户定义的数据

get(hObject,’value’)

一些callback:

  • figure上的callback
    CreateFcn  
    DeleteFcn  
    ButtonDownFcn:左,中,右键;但左键可能冲突时,左键无效  
    WindowButtonDownFcn  
    WindowButtonMotionFcn  
    WindowButtonUpFcn  
    WindowKeyPressFcn  
    WindowKeyReleaseFcn  
    WindowScrollWheelFcn  
    KeyPressFcn  
    KeyReleaseFcn  
    SizeChangedFcn:改变figure大小时,调用这个  
    CloseRequestFcn:关闭GUI时,调用这个  
    % 例如,把CloseRequestFcn中的delete(hObject)删掉,GUI就无法关闭了  
    
  • 控件上的callback
    callback  
    CreateFcn  
    DeleteFcn:控件关闭时触发  
    ButtonDownFcn:右键点击  
    KeyPressFcn:当前控件获得焦点,并且有按键按下时执行  
    
  • table控件上多了2个
    CellEditCallback  
    CellSelectionCallback  
    

gui之间如何传递数据?

GUI内部传递数据:

  • 方法1,用global
  • 方法2,用handle。 写入:handles.F=6;guidata(hObject,handles);. 读取: F=handles.F
  • 方法3:用application. 写入:data.a=100; setappdata(hObject,'my_data',data). 读取:data=getappdata(handles.pushbutton1,'my_data')
    • setappdata:设定或创建结构体数据
    • getappdata:访问数据
    • isappdata:判断是否存在
    • rmappdata:删除

GUI之间传递数据:

  • 方法1,用global
  • 方法2,用application(同上)
  • 方法3,用变量空间(不推荐), assignin('base','a',a) ; a=evalin('caller','a') %'caller'是主函数的workspace

多界面:

h=gcf;  
wenjian;  
close(h);  

http://blog.sina.com.cn/s/blog_630c70530100ies5.html
http://blog.csdn.net/iuway/article/details/7845516
http://blog.sina.com.cn/s/blog_4d633dc70100o58b.html
http://blog.sina.com.cn/s/blog_4b1260cb0100khzd.html
http://www.cnblogs.com/nktblog/archive/2012/05/04/2482875.html

书推荐

  1. 【强烈推荐】matlab与数学试验 国防工业出版社 全面介绍了matlab的各种应用,值得注意的是:数值积分试验,微分方程试验,随机模拟实验,加密方法试验,分形模拟试验,遗传算法试验
  2. 傅里叶变换及其应用 布雷斯威尔 西安交通大学出版社 好书!包含拉普拉斯变换,扩散方程,成像技术等,值得看!!
  3. 数理统计及其在数学建模中的实践(done)
  4. matlab入门到精通:符号计算,电路模拟,simulink
  5. 精通matlab,计算篇(插值,傅立叶分析,偏微分方程),计算实例
  6. 数理统计与数据分析
  7. matlab实用指南(上下)电子工业出版社 书比较薄,比较深

您的支持将鼓励我继续创作!