第一节 图形对象与图形对象句柄
一、什么是图形对象与图形句柄
图形窗口、线条、曲面和注释等都被看作是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('八边形');