MATLAB 之 其他形式的二维图形

文章目录

  • 一、对函数自适应采样的绘图函数
  • 二、其他坐标系下的二维曲线图
    • 1. 对数坐标函数
    • 2. 极坐标图
  • 三、其他特殊二维图像
    • 1. 条形类图形
    • 2. 面积类图形
    • 3. 散点类图形
    • 4. 矢量类图形

  • 二维图线除采用直角坐标系外,还可采用对数坐标或极坐标。除了绘制二维曲线外,MATLAB 的二维图形还包括各种二维统计分析图形。

一、对函数自适应采样的绘图函数

  • 在上一篇博客当中,我们介绍了 plot 函数。
  • 其基本的操作方法为,先取足够稠密的自变量向量 x x x,然后计算出函数值向量 y y y,最后用绘图函数绘图。在取数据点时一般都是等间隔采样,这对绘制高频率变化的函数不够精确。例如函数 f ( x ) = c o s ( t a n ( π x ) ) f(x)=cos(tan(\pi x)) f(x)=cos(tan(πx)),在 (0, 1) 范围有无限多个振荡周期,函数变化率大。
  • 为提高精度,绘制出比较真实的函数曲线,就不能等间隔采样,而必须在变化率大的区段密集采样,以充分反映函数的实际变化规律,进而提高图形的真实度。
  • fplot 函数可自适应地对函数进行采样,能更好地反映函数的变化规律,其调用格式如下:
    fplot(filename,lims,选项) 
  • 其中,filename 代表一个函数,通常采用函数句柄的形式,也可以是字符串形式,很多 MATLAB 函数都有这种用法。可以指定多个分量函数,这时要以单元向量表示。lims 为 x 轴的取值范围,取二元向量 [xmin, xmax],默认值为 [ -5,5]。选项定义与 plot 函数相同,例如:
f=@sin;  %利用函数句柄指定函数
fplot(f, [0,2*pi],'*')  %绘制正弦曲线
fplot('sin(1./x)',[0.01,0.1])  %利用字符串指定函数,但以后的版本将不支持
fplot({@(x)sin(x),@(x)cos(x)},[0,2*pi],'r.')  %利用匿名函数指定函数
  • 观察上述语句绘制的正、余弦曲线采样点的分布,可以发现曲线变化率大的区段,采样点比较密集。
  • 例如,我们用 fplot 函数绘制 f ( x ) = c o s ( t a n ( π x ) ) f(x)=cos(tan(\pi x)) f(x)=cos(tan(πx)) 的曲线。
  • 命令如下:
fplot(@(x)cos(tan(pi*x)),[0,1])
  • 程序运行结果如下图所示。

在这里插入图片描述

二、其他坐标系下的二维曲线图

1. 对数坐标函数

  • 在工程应用中,经常用到对数坐标,例如自动控制理论中的 Bode 图就采用对数坐标。MATLAB 提供了绘制半对数和全对数坐标曲线的函数,调用格式如下:
    semilogx(x1,y1,选项1,x2,y2,选项2,)
    semilogy(xl,y1,选项1,x2,y2,选项2,)
    loglog(xl,y1,选项1,x2,y2,选项2,)
  • 其中,选项的定义与 plot 函数完全一致,所不同的是坐标轴的选取。
  • semilogx 函数使用半对数坐标, x x x 轴为常用对数刻度,而 y y y 轴仍保持线性刻度。
  • semilogy 函数也使用半对数坐标, y y y 轴为常用对数刻度,而 x x x 轴仍保持线性刻度。
  • loglog 函数使用全对数坐标, x x x 轴和 y y y 轴均采用常用对数刻度。
  • 例如,我们绘制 y = 10 x 2 y=10x^{2} y=10x2 的对数坐标图并与直角线性坐标图进行比较。
  • 程序如下:
x=0:0.1:10;
y=10*x.*x;

subplot(2,2,1);
plot(x,y);  %直角坐标曲线
title('plot(x,y)');
grid on;

subplot(2,2,2);
semilogx(x,y);  %x半对数坐标曲线
title('semilogx(x,y)');
grid on;  

subplot(2,2,3);
semilogy(x,y);  %y半对数坐标曲线
title('semilogy(x,y)');
grid on;

subplot(2,2,4);
loglog(x,y);  %全对数坐标曲线
title('log1og(x,y)');
grid on;
  • 程序运行结果如下。

在这里插入图片描述

2. 极坐标图

  • polar 函数用米绘制极坐标图,其调用格式如卜:
    polar(theta,rho,选项)
  • 其中,theta 为极坐标极角,rho为极坐标极径,选项的内容与 plot 函数相似。
  • 例如,蝴蝶曲线是一种富有美感的平面曲线,其极坐标方程如下: ρ = e cos ⁡ θ − 2 cos ⁡ 4 θ + sin ⁡ 5 θ 12 \rho =e^{\cos \theta } -2\cos 4\theta+\sin ^{5} \frac{\theta}{12} ρ=ecosθ2cos4θ+sin512θ
  • (1) 绘制蝴蝶曲线。
  • (2) 调整 θ \theta θ 的大小可以改变曲线形状及其方向,将 θ \theta θ π 2 \frac{\pi}{2} 2π,使图形旋转90°,绘制蝴蝶曲线。
  • 程序如下:
t=0:pi/50:20*pi;
r1=exp(cos(t))-2*cos(4*t)+sin(t/12).^5;
r2=exp(cos(t-pi/2))-2*cos(4*(t-pi/2))+sin((t-pi/2)/12).^5;
subplot(1,2,1)
polarplot(t,r1)  %绘制蝴蝶曲线
subplot(1,2,2)
polarplot(t,r2)  %旋转90°的蝴蝶曲线
  • 程序运行结果如下图所示。

在这里插入图片描述

三、其他特殊二维图像

  • 除二维曲线外,MATLAB 还可以绘制其他特殊二维图形,包括用于统计分析的条形图、直方图、饼图、散点图等。

1. 条形类图形

  • 条形类图形用一系列高度不等的条纹表示数据大小,常用的有条形图和直方图。条形图用于显示不同时间点的数据大小或比较各组数据之间的大小,直方图用于表示数据分布的情况。
  • (1) 条形图。绘制二维条形图的函数为 bar(垂直条形图)与 barh(水平条形图),它们的调用格式是一样的。以 bar 函数为例,常用的调用格式如下:
  • bar(y):若 y 为向量,则分别显示每个分量的高度,横坐标为 y 的下标。若 y 为矩阵,则分别比较 y 的每一行元素的大小, 横坐标为矩阵的行数。
  • bar(x,y,style):在指定的横坐标 x 画出 y。当 y 是 m × n m×n m×n 矩阵时,矩阵中每一行元素绘制在一组中,每一列元素绘制在每组中相对应的 x 位置上。style 指定条形的排列模式,类型有 grouped(簇状分组)和 stacked(堆积分组),默认采用 grouped 排列模式。
  • 条形图应用实例。
  • 程序如下:
x=-1:1;
y=[1,2,3,4,5;1,2,1,2,1;5,4,3,2,1];
subplot(1,2,1);
bar(x,y,'grouped');
title('Group');
axis([-3,3,0,6]);
subplot(1,2,2);
barh(x,y,'stacked');
title('Stack');
  • 程序运行结果如下图所示。

在这里插入图片描述

  • (2) 直方图。在 MATLAB 中,绘制直方图的函数有两个:hist 函数和 rose 函数,分别用于绘制直角坐标系下的直方图和极坐标系下的直方图,后者也称为玫瑰花图。
  • hist 函数的应用更为广泛一些,其调用格式如下:
    hist(y[,x])
  • 如果 y 为向量,则将 y 中的最小值和最大值之间的数值区间等分,并统计每个区间中向量元素的个数,然后以元素个数为高度绘制条形图。
  • 如果 y 为矩阵,hist 函数将 x 的每一列作为一个向量,绘制每一列元素的直方图。
  • 选项 x 用于设置统计区间的划分方式,若 x 是标量,则统计区间均分成 x 个小区间;若 x 是向量,则区间数为向量的长度,向量中的每一个数指定各区间的中心点,省略 x 时,按 10 个等分区间统计。
  • 例如,我们绘制服从高斯分布的直方图,再将这些数据分到指定范围的区间中,并绘制在直方图中。
  • 程序如下:
y=randn(500,1);
subplot(1,2,1);
histogram(y);
title('高斯分布直方图');
x=-4:0.1:4;
subplot(1,2,2);
histogram(y,x);
title('指定范围的高斯分布直方图');
  • 程序运行结果如下图所示。

在这里插入图片描述

  • rose 函数的调用格式与 hist 函数非常相似,调用方法如下:
    rose (theta[,x])
  • 其中,向量 theta 用于确定每一区间与原点的角度(角度以弧度为单位),每一区间长度反映出落入该区间的 theta 元素的个数。
  • 若 x 是标量,则在 [0, 2n] 区间内画出 x 个等距的小扇形,默认值为 20。若 x 是向量,则 x 指定分组中心值,x 中元素的个数为数据分组数。
  • 例如,我们绘制上例高斯分布数据在极坐标下的直方图。
  • 程序如下:
y=randn(500,1);
theta=y*pi;
polarhistogram(theta);
title('在极坐标下的直方图');
  • 程序运行结果如下图所示。

在这里插入图片描述

2. 面积类图形

  • (1) 扇形统计图。扇形统计图又称为饼图,反映一个数据系列中各个分量在总数量中所占的比重。MATLAB 提供了 pie 函数来绘制扇形统计图,其调用格式如下:
    pie(x,explode)
  • pie 函数使用 x 中的数据绘制饼图,x 可以是向量或矩阵。如果 x 为向量,则 x 的每个元素占有一个扇形,从饼图的正上方开始,按逆时针顺序分别为 x 的各个元素。如果 x 为矩阵,则按照列的顺序依次排列矩阵元素。
  • 如果 x 的全部元素之和小于 1,则绘制的图形不是完整的圆。explode 是与 x 同等大小的向量或矩阵,与 explode 的非零值对应的部分将从饼图中心分离出来。当我们省略 explode 时,饼图是一个整体。
  • 例如,某次考试优秀、良好、中等、及格、不及格的人数分别为 7、17、23、19、5,我们试用扇形统计图作成绩统计分析。
  • 程序如下:
pie([7,17,23,19,5],[0,0,0,0,1]);  %对应第5分量部分从饼图中心分离
title('饼图');
legend('优秀','良好','中等','及格','不及格');
  • 程序运行结果如下图所示。

在这里插入图片描述

  • (2) 面积统计图。面积统计图反映数量变化的趋势,在实际中可以表现不同部分对整体的影响。在 MATLAB 中,绘制面积统计图的函数是 area,其调用格式如下。
  • area(x):与 plot(x) 函数一样, 但是将所得曲线下方的区域填充颜色。
  • area(x,y):如果 x、y 均为向量,与 plot(x,y) 一样,但将所得曲线下方的区域填充颜色。如果 x 为向量,y 为矩阵,则矩阵 y 的第一列对向量 x 绘图,然后依次是下一列与前面所有列值的和对向量 x 绘图,每个区域有各自的颜色。
  • 例如,我们绘制一个面积统计图。
  • 程序如下:
x=1:2:9;
y=[1,3,5,2,6;2,4,5,6,2;5,4,7,2,2]';
area(x,y);
grid on;
title('面积统计图');
  • 程序运行结果如下图所示。

在这里插入图片描述

  • 在此,我们对这幅图进行简要分析。
  • 首先,x 的元素是 [1,3,5,7,9] 的向量,而 y 是三行五列矩阵的转置,因此,y 就是五行三列。
  • 然后,向量 x 分别对应 y 的三列,也就是当 x 为 1 时,y 的取值分别是 1,2,5;当 x 为 3 时,y 的取值分别是 3,4,4;当 x 为 5 时,y 的取值分别是 5,5,7;当 x 为 7 时,y 的取值分别是 2,6,2;当 x 为 10 时,y 的取值分别是 6,2,2。
  • 这里需要注意的是,他们需要依次累加。
  • (3) 实心图。实心图是将数据的起点和终点连成多边形,并填充颜色。绘制实心图的函数是 fill,其调用格式如下:
    fill(x,y,颜色)
  • fill 函数按向量元素下标渐增次序依次用直线段连接 x、y 对应元素定义的数据点。假若这样连接所得折线不封闭,那么 MATLAB 将自动把该折线的首尾连接起来,构成封闭多边形,然后将多边形内部涂满指定的颜色。
  • 例如,我们绘制一个红色的正八边形。
  • 程序如下:
t=0:2*pi/8:2*pi;  %取正八边形坐标点
t=[t,t(1)];  %数据向量的首尾重合,使图形封闭
x=sin(t);
y=cos(t);
fill(x,y,'r');  %x、y是圆周坐标,数据间隔足够小时可以画圆
axis equal;
axis([-1.5,1.5,-1.5,1.5]);
  • 程序运行结果如下图所示。

在这里插入图片描述

3. 散点类图形

  • 散点类图形经常用于实验中,比较实验得到的结果与理论值之间的差异,并根据实验误差的特征曲线研究误差的规律,得出实验中研究的对象主体与对象主体相关事物之间的关系。
  • MATLAB 提供了绘制散点类图形的函数 scatterstairsstem,分别用于绘制散点图、阶梯图和杆图。3 个函数的调用格式如下:
    scatter(x,y[,'filled'][,颜色])
    stairs(x,y,选项)
    stem(x,y,选项)
  • 3 个函数的用法与 plot 函数相似。一-般情况下,x、y 为同等大小的向量,用于定位数据点。scatter 函数的 filled 选项表示填充绘图点,省略时,数据点是空心的。
  • 例如,我们分别以散点图、 阶梯图和杆图形式绘制曲线 y = 2 e − 0.5 x y=2e^{-0.5x} y=2e0.5x
  • 程序如下:
x=0:0.35:7;
y=2*exp(-0.5*x);
subplot(1,3,1);
scatter(x,y,'green');
title('scatter(x,y,''g'')');
axis([0,7,0,2]);
subplot(1,3,2);
stairs(x,y,'b');
title('stairs(x,y,''b'')');
axis([0,7,0,2]);
subplot(1,3,3);
stem(x,y,'k');
title('stem(x,y,''k'')');
axis([0,7,0,2]);
  • 程序运行结果如下图所示。

在这里插入图片描述

4. 矢量类图形

  • 矢量由两个参数指定,分别代表矢量的 x 分量和 y 分量,也可以由一个复数指定,复数的实部和虚部分别代表矢量的 x 分量和 y 分量。矢量类图形有罗盘图、羽毛图和箭头图,MATLAB 提供了绘制这些图形的函数。
  • (1) 罗盘图。罗盘图表示起点为坐标原点的向量,同时还在坐标系中显示圆形的分隔线。绘制这种图形的函数是 compass,其调用格式如下。
  • compas(x,y):x、 y 为 n 个元素的向量,函数显示 n 个箭头,箭头的起点为原点,箭头的位置为 (x(i)),y(i))。
  • compass(z):z 为 n 个元素的复数向量,函数显示 n 个箭头,箭头的起点为原点,箭头的位置为 (real(z),imag(z))。real(z) 和 imag(z) 分别代表复数向量的实部和虚部。
  • (2) 羽毛图。羽毛图是在横坐标上等距地显示向量的图形,看起来就像鸟的羽毛一样。绘制羽毛图的函数是 feather,其调用格式如下。
  • feather(x,y):绘制由 x 与 y 确定的向量。
  • feather(z):绘制由 z 确定的向量,等价于 feather(real(z),imag(z))。
  • (3) 箭头图。上面两个函数绘制的图形也可以叫箭头图,但这里的箭头图能更好地表示矢量,它的箭头方向代表矢量方向,箭头长短表示矢量的大小。绘制这种图形的函数是 quiver,其调用格式如下:
    quiver([x,y,]u,v)
  • 其中,(x, y) 为矢量起点,(u, v) 为待绘制的矢量。x、y、u、v 必须是同型矩阵,若省略 x、y,则在平面上均匀取若千个点作为起点。
  • 例如,我们分别以罗盘图、羽毛图和箭头图形式绘制正弦曲线。
  • 程序如下:
x=-pi:pi/8:pi;
y=sin(x);
subplot(2,2,1);
compass(x,y);
title('罗盘图');
subplot(2,2,2);
feather(x,y);
title('羽毛图');
subplot(2,1,2);
quiver(x,y);
title('箭头图');
  • 程序运行结果如下图所示。
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/21893.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Anaconda安装与Python环境搭建

这篇文章介绍了如何安装Anaconda,及Python环境如何配置,你是否还在为难以寻找一篇讲述全面的环境配置博客而苦恼,稍安勿躁,你找对啦,照着本篇文章做下去,你就会发现没那么难呢! Anaconda安装 …

Python系列模块之标准库OS详解

感谢点赞和关注 ,每天进步一点点!加油! 目录 ​一、模块 1.1 模块的定义 1.2 模块的分类 1.3 模块的基本导入语法 二、Python中的包 三、标准库之os模块 实战: 钉钉告警应用 一、模块 1.1 模块的定义 Python 模块(Module)&a…

目标检测数据预处理——部件截图,按一定比例进行外扩

本片是截图的篇的升级版本,简单版本的截图请参考根据目标框外扩一定比例进行截图(连带标签)。 对目标框(类别名称)进行分类,将同一类的目标框进行截图并分类保存在不同的文件夹中。 在本篇当中,…

Flink有状态计算的状态容错

状态容错 State Fault Tolerance 首先来说一说状态容错。Flink 支持有状态的计算,可以把数据流的结果一直维持在内存(或 disk)中,比如累加一个点击数,如果某一时刻计算程序挂掉了,如何保证下次重启的时候&…

一文了解customRef 自定义ref使用

概念 按照文档中的说明:customRef 可以用来创建一个自定义的 ref,并对其依赖项跟踪和更新触发进行显式控制。它需要一个工厂函数,该函数接收 track 和trigger函数作为参数,并且应该返回一个带有 get 和 set 的对象。 其实大致意思…

5.2 标准IO:文件的打开、关闭及代码实现

目录 标准IO 文件的打开 标准I/O-fopen-mode参数 ​编辑 标准I/O-fopen-示例 标准I/O-fopen-新建文件权限 标准I/O-处理错误信息 标准I/O-错误信息处理-示例1 标准I/O-错误信息处理-示例2 文件的关闭 标准IO 文件的打开 打开就是占用资源 下列函数可用于打开一个…

历经70+场面试,我发现了大厂面试的套路都是···

今年的金三银四刚刚过去,我又想起了我在去年春招时面试了50余家,加上暑期实习面试了20余家,加起来也面试了70余场的面试场景了。 基本把国内有名的互联网公司都面了一遍,不敢说自己的面试经验很丰富,但也是不差的。 …

Kali-linux使用社会工程学工具包(SET)

社会工程学工具包(SET)是一个开源的、Python驱动的社会工程学渗透测试工具。这套工具包由David Kenned设计,而且已经成为业界部署实施社会工程学攻击的标准。SET利用人们的好奇心、信任、贪婪及一些愚蠢的错误,攻击人们自身存在的…

HNU-计算机系统-Challenge

Challenge 计科210X wolf 202108010XXX 本题是从属于第七次讨论课的个人题,听说做了有加分?我来试试。 下面是相关报告。 题目: C 语言的初学者第一个编写的 C 代码一般是如下所示的“ #include <stdio.h> int main() {printf("Hello, World!");

项目管理:有效的沟通对项目的成功至关重要

为实施有效的沟通&#xff0c;需要建立沟通管理计划同时理解什么是沟通&#xff0c;沟通的对象是谁&#xff0c;沟通的目标是什么&#xff0c;难度在哪里&#xff0c;并选择合适的沟通方式。 项目沟通是确保项目团队的相关信息能及时、正确地产生、收集、发布、储存和最终处理…

Java多线程异常处理

文章目录 一. 线程中出现异常的处理1. 线程出现异常的默认行为2. setUncaoughtExceptionHandler()方法处理异常3. setDefaultUncaoughtExceptionHandler()方法进行异常处理 二. 线程组内出现异常 一. 线程中出现异常的处理 1. 线程出现异常的默认行为 当单线程中初出现异常时…

LOTO示波器如何测试阻抗的频响曲线

LOTO示波器如何测试阻抗的频响曲线 模块的输入输出端口&#xff0c;在电路分析上&#xff0c;一般简单表征为电阻来进行计算和分析。但多数情况下&#xff0c;这些端口并不是纯电阻的特性&#xff0c;更精确一些&#xff0c;它可能是电阻电容以及电感的组合&#xff0c;表现为非…

ChatGPT 聊天接口API 使用

一、准备工作 1.准备 OPENAI_ACCESS_TOKEN 2.准备好PostMan 软件 二、测试交流Demo 本次使用POSTMAN工具进行快速测试&#xff0c;旨在通过ChatGPT API实现有效的上下文流。在测试过程中&#xff0c;我们发现了三个问题&#xff1a;    1.如果您想要进行具有上下文的交流&…

从供应链协同角度挖掘数字化应用场景

企业在数字化转型的过程中&#xff0c;供应链的数字化转型是绕不开的话题。供应链的数字化转型&#xff0c;是借助数字化技术赋能企业和供应链从业人员&#xff0c;驱动业务向更加高效智能的方向发展。越来越多的企业意识到需要依靠新技术&#xff0c;也往往非常强调新技术的应…

为什么我们应该选择Renderbus瑞云渲染进行 EEVEE 渲染?

在某些情况下&#xff0c;用户需要高精度、快速的渲染&#xff0c;而 EEVEE的诞生就是为了满足这种需求。Eevee&#xff08;Extra Easy Virtual Environment Engine&#xff09;是 Blender 最新的内部渲染引擎&#xff0c;由用于 Epic Games 开发的虚幻引擎的相同代码提供支持…

openldap介绍以及使用

参考文献&#xff1a;openldap介绍和使用 基本概念 官网&#xff1a;https://www.openldap.org 官方文档&#xff1a;https://www.openldap.org/doc LDAP是一个开放的&#xff0c;中立的&#xff0c;工业标准的应用协议&#xff0c;通过IP协议提供访问控制和维护分布式信息的…

【Linux】进程信号“疑问?坤叫算信号吗?“

鸡叫当然也算信号啦~ 文章目录 前言一、认识信号量二、信号的产生 1.调用系统函数向进程发信号2.由软件条件产生信号3.硬件异常产生信号总结 前言 信号在我们生活中很常见&#xff0c;下面我们举一举生活中信号的例子&#xff1a; 你在网上买了很多件商品&#xff0c;再等待不…

统计一个数的二进制中1的个数(三种方法)

那么好了好了&#xff0c;宝子们&#xff0c;今天给大家分享一篇经典例题的三种实现方法&#xff0c;来吧&#xff0c;开始整活&#xff01;⛳️ 一、基础法 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> int number_of_one(int n) {int count 0;while(n){if…

VTKmimics Calculate Parts

前言&#xff1a;本博文主要研究mimics中Calculate Parts所采用的方法以及VTK中三维重建的方法&#xff0c;希望对各位小伙伴有所帮助&#xff0c;谢谢&#xff01; mimics-Calculate parts - Interpolation Gray Interpolation 灰度值插值是一种真正的3D插值&#xff0c;它考…

宝塔面板快速搭建贪吃蛇小游戏web网站 - 无需云服务器,网站发布上线

文章目录 前言视频教程1. 环境安装2. 安装cpolar内网穿透3. 内网穿透4. 固定http地址5. 配置二级子域名6. 创建一个测试页面&#x1f34e;总结 转载自远程内网穿透的文章&#xff1a;Linux使用宝塔面板搭建网站&#xff0c;并内网穿透实现公网访问 前言 宝塔面板作为简单好用的…