MATLAB-图形功能

本文详细介绍了MATLAB的图形功能,包括二维和三维图形的绘制,如plot函数的使用、线条和标记的属性设置、图形修饰如坐标轴、图例等。此外,还涵盖了子图的创建、极坐标图、误差图、空间曲线、曲面图、等势线的绘制,以及句柄图形的基本概念。最后,文章提到了颜色表的使用和简单动画的实现方法。
摘要由CSDN通过智能技术生成

Matlab_4 图形功能
二维图形
三维图形
句柄图形简介
二维曲线—plot函数
x = linspace(0, 2*pi, 30);
y = sin(x);
plot(x,y)
% 同时绘制多条曲线
z = cos(x);
plot(x, y, x, z)
% 如果输入参数一个是矩阵、一个是向量。
% plot函数将矩阵中的每一列与向量组成一个输入对分别绘制相应的图形。
w = [y; z];
plot(x, w)
% 如果只有一个输入参数plot(a),根据y的内容进行操作。
% 复数:plot( real(a), imag(a) ) (注:复数的虚部通常是被忽略的。)
% 向量:plot( 1:length(a), a )
% 矩阵:plot( 1:size(a,1), a(:,1), a(:,2), … ) 即y中每一列分别作为向量处理

c = complex(y, z); plot©
plot(z)
plot(w.’) % w的方向
线条和标记的属性设置
线条类型Line style
颜色Color
标记类型Marker type

% 默认属性是实线、蓝色、无标记。
% 属性设置写在字符串中。

% 例:
x = linspace(0, 2*pi, 30);
y1 = sin(x);
y2 = cos(x);
plot(x, y1, x, y2, ‘-or’, x, y1.*y2, ‘:dm’)

% 查看更多属性设置:线条宽度、标记大小颜色等。
doc linespec
图形修饰
—坐标轴、格栅、轴框、标签、文本、图例

% axis( [xmin, xmax, ymin, ymax] ) 设定当前图形的坐标范围
% axis auto 将坐标轴刻度恢复为默认状态
% axis equal 设定坐标轴尺度等距
% xlim, ylim, zlim 分别设置坐标范围

% grid on添加格栅
% grid off删除格栅
% 无参数grid为状态切换

% 通常2D轴框(axes box)是封闭的
% box (on/off)状态切换

% xlabel和ylabel,坐标轴标签
% title 图形标题
% text(x, y, ‘string’),在指定位置添加字符串
% legend 图例
% 上述的功能只对当前活动的图形窗口。
多个图形窗口
% hold (on/off) 保持/释放当期图形窗口
% ishold 状态判别
% figure 生成新的图形窗口
% figure(n) 激活指定图形窗口
% close 关闭当前图形窗口
% close(n) 关闭指定图形窗口
% close all 关闭所有图形窗口
% clf 擦除图形窗口,不关闭

绘制子图—subplot

subplot(m, n, p)将当前窗口分为m*n个绘图区域,p为当前区域号。
子图顺序从上边一行开始从左至右,然后是下一行。
% ----------------------------------------
% 例:subplot和图形修饰

x = linspace(0, 2*pi, 30);
y1 = sin(x);
y2 = cos(x);

subplot( 2, 2, 1)
plot( x, y1, ‘-*r’)
title( ’ figure of function sin(x).’ )

subplot( 2, 2, 2)
plot( x, y2, ‘:sm’ )
legend( ‘cos(x)’ )
grid on

subplot( 2, 2, 3)
plot( x, y1+y2 )
xlabel( ‘x-axis’ )
ylabel( ‘y-axis’ )
text( 1, 0, ‘subplot demo’ )

subplot( 2, 2, 4)
plot( x, y1.*y2 )
axis equal
grid on

% 例:极坐标图polar

theta = linspace(0, 2pi);
r = sin(2
theta).cos(2theta);
subplot(1, 2, 2)
polar( theta, r, ‘.-r’)
title( ’ demo of polar ’ )

% 例:误差图errorbar
x = linspace( 0, 2, 21 );
y = erf(x);
e = rand(size(x))/10;
errorbar(x, y, e, ‘-sm’ )
legend( ‘errorbar’, 4 )

文本格式

%Matlab支持的文本解释器:None,Tex(默认)和Latex。
% 适用于图形文本处理函数:text, title, legend, xlabel, …
% 属性说明选择解释器,如text(…, ‘interpeter’, ‘latex’, …)

% 多行文本,用字符串数组或字符串单元数组
text(0.5, 0.5, [‘abcd’; 'cba '; 'ab ']); %字符串数组,书写格式
text(0.5, 0.5, {‘abcd’, ‘cba’, ‘ab’}); %字符串单元数组
%分隔符(空格,逗号,分号)等效。
%% TeX文本格式
%上下标:控制字符^, _
%希腊字母和特殊符号:控制字符…
%(Tex字符集:textText PropertiesTex Character Sequence Table)
%块标注:{}
%显示控制格式符号:\, ^, _, {, }
%字体、大小和颜色:\fontname, \fontsize, \color
%常用字体:粗体\bf, 斜体\it, \透明sl, 印刷体\rm

%% an example:
text(0.2, 0.1, ‘\fontsize{20}abc\fontsize{10}abc’, …
‘Edgecolor’, ‘m’, ‘LineStyle’, ‘:’, ‘backgroundcolor’, [1 1 0]);
text(0.2, 0.3, ‘\color{red}abcd\color[rgb]{0 0 1}abcd’);
text(0.2, 0.5, ‘\fontsize{16}\itabc\bfabc\rmabc’)
text(0.2, 0.7, ‘F(t) = \SigmaA_ncos(n\omegat)’, ‘FontSize’, 16) %
text(0.2, 0.9, ‘\fontsize{16}F(t) = \fontsize{24}\Sigma\fontsize{16}A_ncos(n\omegat)’)
ylabel( {‘Conductivity’, ‘x10^2, W\cdotm{-1}\cdotK{-1}’} )

交互式绘图工具plottools
Matlab提供了交互式绘图,方便实现各种图形的绘制、图形格式转换等多种功能。
运行方式:
在命令窗口中运行plottools
直接在图形窗口中点击工具图标

图形的保存:
gif格式。
可交换格式,如bmp、pgn、tif等。
M函数,保存绘图格式。

空间曲线—plot3

% plot3绘制单一自变量的空间函数图形
% 用法与plot基本相同

t = linspace(0, 10*pi);
plot3( sin(t), cos(t), t, ‘.-’ )

grid on
xlabel(‘X-坐标轴’), ylabel(‘Y-坐标轴’), zlabel(‘Z-坐标轴’)
title( ‘三维空间曲线’ )
text(0, 0, 0, ‘坐标原点’ )
legend( ‘螺旋线’ , 2)

空间网格/曲面—mesh/surf

绘制两个自变量的变量函数空间图形:
z = f ( x, y )

创建由x和y能够表示的所有格点,用两个矩阵X和Y表示。
用X和Y数组元素间运算,生成z值的网格。

% 函数meshgrid生成网格坐标矩阵
x = 1:3;
y = 10:10:50;
[X, Y] = meshgrid( x, y )

% 计算函数z = (x+y)^2的值
Z = (X+Y).^2

% 网格图mesh
mesh( X, Y, Z )

% 曲面图surf
surf( x, y, Z )
colorbar % color scale

% 绘制函数x.exp(-x2-y2)图形
[x, y] = meshgrid(-2:0.1:2); % 一个输入参数表示xy取值相同
z = x.*exp(-x.2-y.2);
mesh(x,y,z )

surf( x, y, z )
shading interp % faceted/flat/interp

peaks函数:

z=3(1-x^2 ) e(-x2-〖(y+1)〗^2 )-10(x/5-x3-y5 ) e(-x2-y^2 )-1/3 e(-(x-1)2-y^2 )

% Matlab将该函数定义在peaks.m中
% 缺省为x, y ~ [-3, 3]
edit peaks % 查看源代码
peaks % 显示函数图形

[x, y, z] = peaks(10); % 返回三个n*n网格矩阵
surf( x, y, z )

三维视角—view

Azimuth方位角
Elevation高度角
% 函数view的用法:

% view(az, el) 设置视点,az和el用角度表示
% view([x,y,z]) 设置笛卡尔坐标(x, y, z)为视点
% view(2) xy平面二维视图,= view(0, 90)
% view(3) 默认的三维视图,= view( –37.5, 30 )
% doc view 查看更多的用法

% 例
peaks
zlabel(‘z-axis’)
colorbar

view(2)
view(90, 0) % yz-plane
view(0, 0) % xz-plane
view(0, 90) % xy-plane
view( [1, 1, 1] )
view(3)

等势线—contour/contour3
[x, y, z] = peaks(20);

% 绘制xy平面的等势线
contour( x, y, z )

% 绘制3D空间等势线
contour3(x, y, z )

% 添加数值
c = contour(x, y, z, 10);
clabel©;

% 隐函数的图形
% 例:x2 – y2 = 1
[x, y] = meshgrid(-3:0.1:3);
z = x.^2 - y.^2 -1;
c = contour(x, y, z, [0 0], ‘r’); % 注意只划一条线的用法
clabel©;

句柄图形简介

Matlab的每一个可视部分被视为一个对象,每个对象都有一个唯一的标识符(句柄)与之对应,且每个对象都包含一组可以修改的属性。一个图形对象就是一个可以被单独处理的单元。Matlab中所有的绘图和图像函数都可以用来创建图形对象,注意有些函数创建的是复合(多个)对象。
计算机屏幕视为根对象,是所有对象的父对象。图形(figure)是根对象的子对象。
根对象句柄为0;图形句柄为整数;其他对象的句柄值为浮点数。所有对象(图形函数)都会返回所创建对象的句柄值。
所有对象都有一组定义其特征的属性,通过设置这些属性,用户可以调整图形显示的方式。每个不同的对象都有其独立的属性。

常用函数:
get (handle, ‘property’):获取句柄图形对象的属性。使用单元数组获取多个属性值。
set (handle, ‘property’, value…):改变句柄图形对象的属性。多个属性分别输入。
inspect (handle):查看和修改对象的属性。
gcf:获取当前图形的句柄。
gca:获取当前轴框的句柄
gco:获取当前对象的句柄
findobj, copyobj, delete

%% 例
% nested figure

h = @(x)exp(-x).*sin(exp(x));

x = linspace(0, 5);
H1 = figure(1);
Hfig1 = plot(x,h(x),’.-r’); %grid on;
set(gca, ‘color’, [0 1 1])

x2 = linspace(4, 4.5);
H2 = figure(2);
Hfig2 = plot(x2, h(x2), ‘.-r’); grid on;
set(gca, ‘position’, [0.5, 0.5, 0.4, 0.4]);

set(gca, ‘parent’, H1) %…
close(H2)

颜色表及其使用

颜色的表示:
Matlab用一个三列的行向量表示颜色值,其中三个元素分别表示红绿蓝的强度。
100 010 001 000 111 .5 .5 .5
1 1 0 1 0 1 0 1 1 黄,洋红,青
.67 0 1 1 .4 0 0.5 0 0 0 0 .5 紫,橙,暗红,暗绿
多个RGB向量构成的数组(m x 3),称为颜色表。Matlab预先定义的颜色表:
hsv色度-亮度-饱和度:红-红;
jet 蓝-红;
gray 线性灰度 ;
……
上述颜色函数可以根据输入参数m生成mx3的颜色表(缺省为m=64)。

函数colormap选择设定的颜色表数组为当前图形使用的颜色表。
Matlab的绘图函数采用下列方式接受颜色参数:
定义颜色的字符或字符串,如’r’或’red’。
定义颜色的RGB行向量,如[1 0 0]。
一个数组,Matlab将对数组元素进行换算成读取颜色表中颜色值的索引。

颜色表的显示:
%(1)直接查看颜色表元素的数值
hot(8)
gray(5)
%(2)用函数pcolor和rgbplot显示

% 例:显示颜色表
n = 21;
map = copper(n);
colormap(map);
subplot(2,1,1)
[xx, yy] = meshgrid(0:n, [0 1]);
c = [1:n+1; 1:n+1];
pcolor(xx, yy, c)
subplot(2,1,2), rgbplot(map), xlim([0 n])

%函数colorbar为图形添加色条。

%% 颜色表的使用
% 颜色描述第四维信息surf(x,y,z,c)

x = -7.5:0.5:7.5; [X Y] = meshgrid(x);
R = sqrt(X.^2 + Y.^2) + eps; % eps?
Z = sin®./R; % create sombrero.
surf(X, Y, Z, R)

[dzdx, dzdy] = gradient(Z); dR = sqrt(dzdx.2+dzdy.2);
surf(X, Y, Z, dR)

%散点的位置和次序scatter

n = 50; x = 2rand(n, 1); y = 2rand(n, 1);
% scatter(x,y);
r = 10+30*((x-1).2+(y-1).2); %数据点的大小(位置)
c = jet(n); %数据点次序(颜色)
colormap©;
scatter(x, y, r, c, ‘filled’), colorbar

简单动画
% 动画函数animatedline, addpoint, addpoints…

%% comet函数
N = 2;
t = linspace(0, 2pi); % try point 1000
x = sin(N
t).cos(t);
y = sin(N
t).*sin(t);

comet(x, y, 0.1) % 0~1, default=0.1

%% 使用pause函数
N = 2; % try any other N
t = linspace(0, 2pi);
x = sin(N
t).cos(t);
y = sin(N
t).*sin(t);

figure
axis equal
axis([-1, 1, -1, 1])
axis tight

hold on
for i = 1:99
plot( x(i:i+1), y(i:i+1), ‘LineWidth’, 3, ‘color’, ‘r’ );
pause(0.1);
end;
hold off

%% 使用figure_handle
N = 2;
t = linspace(0, 2pi);
x = sin(N
t).cos(t);
y = sin(N
t).*sin(t);

figure
axis equal
axis([-1, 1, -1, 1])
axis tight

hold on
h = plot(x(1:2), y(1:2), ‘Linewidth’, 3, ‘color’, ‘r’, ‘erase’, ‘none’); % 属性erase不再使用
for i = 1:99
set(h, ‘xdata’, x(i:i+1), ‘ydata’, y(i:i+1) );
pause(0.1);
end;
hold off

图片和影像
% 函数getframe获取一帧图形数据
% 函数imread, imwrite, image读、写和显示图片
% 函数movie播放视频
% 函数movie2avi将视频储存为avi文件

% 函数getframe
x = 0:0.1:2*pi; y = sin(x);
h = figure % 返回图形句柄
h1 = gcf % 获得当前图形句柄
h2 = gca % 获得当前坐标轴句柄
plot(x, y, ‘-or’)
title(‘Sine Function’)

F1 = getframe(h) % 获得一帧影像数据
F2 = getframe(gca)
figure, image( F1.cdata ) % 显示像素图形
figure, image( F2.cdata )

imwrite(F1.cdata, ‘fig1.tif’) % 保存为tif图片
imwrite(F2.cdata, ‘fig2.tif’)

%% 录制movie
nF = 20; % 设置总帧数
F(1:nF) = struct(‘cdata’, [], ‘colormap’, []);
z = peaks(15);
surf(z) ;
axis tight; % 设定坐标轴
set(gca,‘NextPlot’,‘replacechildren’); % 设置图形对象属性
for k = 1:nF
surf(sin(2pik/nF)*z, z)
F(k) = getframe; % default for getframe(gca)
end
movie(F, 5, 5)
% 播放,重复5遍,播放速度fps为每秒5帧(缺省为12)
movie2avi(F, ‘mv1.avi’, ‘compression’, ‘None’, ‘fps’, 1);
% 保存为avi文件,缺省 fps=15

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值