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