【MATLAB 从零到进阶】day6 MATLAB绘图与可视化

第一节 图形对象与图形对象句柄

一、什么是图形对象与图形句柄

图形窗口、线条、曲面和注释等都被看作是MATLAB中的图形对象,所有这些图形对象都可以通过一个被称为“句柄值”的东西加以控制,例如可以通过一个线条的句柄值来修改线条的颜色、宽度和线型等属性。这里所谓的“句柄值”其实就是一个数值,每个图形对象都对应一个唯一的句柄值,它就像一个指针,与图形对象一一对应。例如可以通过命令h = figure返回一个图形窗口的句柄值。

二、获取图形对象属性名称和属性值

>> h = line([0 1],[0 1]) h = 0.0149 >> get(h)

三、设置图形对象属性值

>> text(0,0.5,'text'); >> text(0,0.5,'未改变线宽'); >> subplot(1,2,1); >> h1=line([0 1],[0 1]); >> text(0,0.5,'未改变线宽'); >> subplot(1,2,2); >> h2=line([0 1],[0 1]); >> set(h2,'LineWidth',3) >> text(0,0.5,'已改变线宽');

第二节 二维图形绘制

一、基本二维绘图函数

MATLAB 中提供了plot,loglog,semilogx,semilogy,

polar,plotyy 等6个非常实用的基本二维绘图函数,下面重

点介绍plot函数的用法

1. plot函数

调用格式:

plot(Y)

plot(X,Y)

plot(X1,Y1, X2,Y2,...)

plot(X1,Y1,LineSpec,...)

plot(...,'PropertyName',PropertyValue,...)

plot(axes_handle,...)

h = plot(...)

hlines = plot('v6',...)

线型、描点类型、颜色参数表

>> x=linspace(0,2*pi,30); >> y=sin(x); >> plot(x,y,'g-.+');

绘制正弦函数图像

>> x=0:0.25:2*pi; >> y=sin(x); >> plot(x,y,'-ro',...) 'LineWidth',2,... 'MarkerEdgeColor','k',... 'MarkerFaceColor',[0.49,1,0.63],... 'MarkerSize',12) >> xlabel('X');ylabel('Y');

loglog函数:双对数坐标绘图

>> x=logspace(-1,2); >> loglog(x,exp(x),'-s') >> grid on >> xlabel('X');ylabel('Y');

semilogx,semilogy函数:半对数坐标绘图

>> x = 0 : 0.1 : 10; >> semilogy(x, 10.^x) >> xlabel('X'); ylabel('Y');

4. polar函数:极坐标绘图

>> t = 0 : 0.01 : 2*pi; >> polar(t, sin(2*t).*cos(2*t),'--r') >> t=0:0.01:2*pi; >> polar(t,sin(2*t).*cos(2*t),'--r')

5. plotyy函数:双纵坐标绘图

>> x = 0:0.01:20; >> y1 = 200*exp(-0.05*x).*sin(x); >> y2 = 0.8*exp(-0.5*x).*sin(10*x); >> ax = plotyy(x,y1,x,y2,'plot'); xlabel('X'); >> set(get(ax(1),'Ylabel'),'string','Left Y'); >> set(get(ax(2),'Ylabel'),'string','Right Y');

二、二维图形修饰和添加注释

可以通过MATLAB命令对图形进行修饰和添加注释,也可以通过图形窗口的菜单项和工具栏完成这些工作。后者通过鼠标点击操作,相对比较简单,下面仅对相关命令进行介绍

hold 函数:开启和关闭图形窗口的图形保持功能

axis 函数:设置坐标系的刻度和显示方式

box 函数: 显示或隐藏坐标边框

grid 函数:为当前坐标系添加网格

title 函数:为当前坐标系添加标题

xlabel和ylabel 函数:为当前坐标轴添加标签

text函数:在当前坐标系中添加文本对象(text对象)

gtext函数:在当前坐标系中交互式添加文本对象

legend函数:在当前坐标系中添加line对象和patch对象的图形标注框

annotation函数:在当前图形窗口建立注释对象(annotation对象)

subplot 函数:绘制子图,即在当前图形窗口以平铺的方式创建多个坐标系

>> t=linspace(0,2*pi,60); >> x=cos(t); >> y=sin(t); >> plot(t,x,':','LineWidth',2); >> hold on >> plot(t,y,'r-.','LineWidth',3); >> plot(x,y,'k','LineWidth',2.5); >> axis equal >> xlabel('X');ylabel('Y'); >> legend('x=cos(t)','y=sin(t)','单位圆','Location','Northeast');

例椭圆3x2+2xy+4y2= 5

>> P = [3 1; 1 4]; >> r = 5; >> [V, D] = eig(P); >> a = sqrt(r/D(1)); >> b = sqrt(r/D(4)); >> t = linspace(0, 2*pi, 60); >> xy = V*[a*cos(t); b*sin(t)]; >> plot(xy(1,:),xy(2,:), 'k', 'linewidth', 3); >> h = annotation('textarrow',[0.606 0.65],[0.55 0.65]); >> set(h, 'string','3x^2+2xy+4y^2 = 5', 'fontsize', 15); >> h = title('这是一个椭圆曲线', 'fontsize', 18, 'fontweight', 'bold'); >> set(h, 'position', [-0.00345622 1.35769 1.00011]); >> axis([-1.5 1.5 -1.2 1.7]); >> xlabel('X'); >> ylabel('Y');

三、常用统计绘图函数

hist / hist3 二维/三维频数直方图

cdfplot 经验累积分布图

histfit 直方图的正态拟合

ecdfhist 经验分布直方图

boxplot 箱线图

lsline 为散点图添加最小二乘线

probplot 概率图

refline 添加参考直线

qqplot q-q 图(分位数图)

refcurve 添加参考多项式曲线

normplot 正态概率图

gline 交互式添加一条直线

ksdensity 核密度图

scatterhist 绘制边缘直方图

x=normrnd(0,1,1000,1); subplot(1,2,1); hist(x,20); xlabel('样本数据'); ylabel('频数'); subplot(1,2,2); cdfplot(x);

四、特殊二维绘图函数

fplot 绘制函数图

comet 彗星图

ezplot 隐函数直角坐标绘图

compass 罗盘图

ezpolar 隐函数极坐标绘图

feather 羽毛图

pie 饼图

rose 玫瑰图

stairs 楼梯图

errorbar 误差柱图

stem 火柴杆图

pareto Pareto(帕累托)图

bar 柱状图

fill 多边形填充图

barh 水平柱状图

patch 生成 patch 图形对象

>> subplot(3, 3, 1); >> f = @(x)200*sin(x)./x; >> fplot(f, [-20 20]); >> title('y = 200*sin(x)/x'); >> subplot(3, 3, 2); >> ezplot('x^2 + y^2 = 1', [-1.1 1.1]); >> axis equal; >> title('单位圆'); >> subplot(3, 3, 3); >> ezpolar('1+cos(t)'); >> title('心形图'); >> subplot(3, 3, 4); >> x = [10 10 20 25 35]; >> name = {'赵', '钱', '孙', '李', '谢'}; >> explode = [0 0 0 0 1]; >> pie(x, explode, name) >> title('饼图'); >> subplot(3, 3, 5); >> stairs(-2*pi:0.5:2*pi,sin(-2*pi:0.5:2*pi)); >> title('楼梯图'); >> subplot(3, 3, 6); >> stem(-2*pi:0.5:2*pi,sin(-2*pi:0.5:2*pi)); >> title('火柴杆图'); >> subplot(3, 3, 7); >> Z = eig(randn(20,20)); >> compass(Z); >> title('罗盘图'); >> subplot(3, 3, 8); >> theta = (-90:10:90)*pi/180; >> r = 2*ones(size(theta)); >> [u,v] = pol2cart(theta,r); >> feather(u,v); >> title('羽毛图'); >> subplot(3, 3, 9); >> t = (1/16:1/8:1)'*2*pi; >> fill(sin(t), cos(t),'r'); >> axis square; title('八边形');

原文发布于微信公众号 - 机器学习与统计学(tjxj666)

原文发表时间:2015-06-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券