Matlab基础篇:绘图与可视化

目录

前言

一、二维绘图

二、图形属性设置

三、多图绘制

四、三维绘图

五、绘图技巧

六、绘图的高级技巧

七、实例示范:绘制多功能图形

八、总结


前言

在数据分析和数学建模中,可视化是一个非常关键的步骤。Matlab 提供了丰富的绘图和可视化工具,可以方便地创建各种类型的图形。本文将详细介绍 Matlab 的绘图与可视化功能,包括二维绘图、三维绘图、多图绘制、图形属性设置等。

一、二维绘图

Matlab 提供了多种函数用于绘制二维图形,如 plotscatterbarpie 等。

  1. plot函数
    • plot 函数用于绘制二维线图。

    x = 0:0.1:10;        % 创建 x 数据
    y = sin(x);          % 计算 y 数据
    plot(x, y);          % 绘制二维线图
    title('Sin Function'); % 设置标题
    xlabel('x');         % 设置 x 轴标签
    ylabel('sin(x)');    % 设置 y 轴标签
    grid on;             % 打开网格

  1. scatter函数
    • scatter 函数用于绘制二维散点图。

    x = rand(1, 100);    % x 轴随机数据
    y = rand(1, 100);    % y 轴随机数据
    scatter(x, y, 'filled'); % 绘制二维散点图
    title('Scatter Plot'); % 设置标题
    xlabel('x');         % 设置 x 轴标签
    ylabel('y');         % 设置 y 轴标签
    grid on;             % 打开网格

  1. bar函数
    • bar 函数用于绘制柱状图。

    x = 1:5;             % 确定 x 轴数据
    y = [10, 20, 30, 25, 15]; % 柱状图高度
    bar(x, y);           % 绘制柱状图
    title('Bar Graph');  % 设置标题
    xlabel('Category');  % 设置 x 轴标签
    ylabel('Values');    % 设置 y 轴标签
    grid on;             % 打开网格

下表总结了常用的二维绘图函数及其示例:

函数示例说明
plotplot(x, y);绘制二维线图
scatterscatter(x, y, 'filled');绘制二维散点图
barbar(x, y);绘制柱状图
piepie([10, 20, 30, 40]);绘制饼图

二、图形属性设置

在 Matlab 中,我们不仅可以绘制图形,还可以自定义图形的各种属性,包括颜色、线型、标记、标题、标签、网格和坐标轴等。

  1. 颜色与线型
    • 可以通过指定颜色和线型来更改图形外观。

    x = 0:0.1:10;
    y_sin = sin(x);
    y_cos = cos(x);
    plot(x, y_sin, '--r', x, y_cos, ':b'); % 使用 '--r' 和 ':b' 分别指定颜色和线型
    legend('sin(x)','cos(x)');  % 添加图例

  1. 标记
    • 通过 Marker 属性来设置数据点的标记样式。

    plot(x, y_sin, '-or'); % 使用 '-or' 设置线型和标记

  1. 标题和标签
    • 通过 titlexlabelylabel 等函数来设置标题和轴标签。

    title('Sin and Cos Functions'); 
    xlabel('x');
    ylabel('Function Values');

  1. 网格与坐标轴
    • 使用 grid 打开或关闭网格,使用 axis 设置坐标轴范围。

    grid on;   % 打开网格
    axis([0 10 -1.5 1.5]); % 设置坐标轴范围

以下是图形属性设置的常用操作:

操作示例说明
设置颜色plot(x, y, '-r');绘制红色线条
设置线型plot(x, y, '--');绘制虚线
设置标记plot(x, y, 'o');使用圆形标记绘制数据点
标题和标签title('Title'); xlabel('X Axis'); ylabel('Y Axis');设置标题和轴标签
网格grid on;打开网格
坐标轴范围axis([xmin xmax ymin ymax]);设置坐标轴范围

三、多图绘制

Matlab 支持在一个图窗口中绘制多个子图,通过 subplot 函数可以实现这一功能。此外,还可以使用 figure 函数创建多个图窗口。

  1. subplot函数
    • 可以在同一个图窗口中创建多个子图。

    x = 0:0.1:10;
    y1 = sin(x);
    y2 = cos(x);

    subplot(2, 1, 1); % 创建2行1列的子图,当前是第一个子图
    plot(x, y1);
    title('Sin(x)');

    subplot(2, 1, 2); % 创建2行1列的子图,当前是第二个子图
    plot(x, y2);
    title('Cos(x)');

  1. figure函数
    • 可以创建多个图窗口。

    figure; % 创建第一个图窗口
    plot(x, y1);
    title('Figure 1: Sin(x)');

    figure; % 创建第二个图窗口
    plot(x, y2);
    title('Figure 2: Cos(x)');

以下是多图绘制的常用操作:

操作示例说明
子图subplot(2, 1, 1); plot(x, y1);创建2行1列的第一个子图
新窗口figure; plot(x, y1);创建新的图窗口

四、三维绘图

Matlab 也支持三维绘图,主要函数有 plot3meshsurf 等。

  1. plot3函数
    • 绘制三维曲线图。

    t = 0:0.1:10;
    x = sin(t);
    y = cos(t);
    z = t;
    plot3(x, y, z); % 绘制三维曲线
    title('3D Plot');
    xlabel('x');
    ylabel('y');
    zlabel('z');
    grid on;

  1. meshsurf函数
    • 绘制三维网格图和三维表面图。

    [X, Y] = meshgrid(-3:0.1:3, -3:0.1:3);
    Z = sin(sqrt(X.^2 + Y.^2));
    subplot(1, 2, 1);
    mesh(X, Y, Z); % 绘制三维网格图
    title('Mesh Plot');

    subplot(1, 2, 2);
    surf(X, Y, Z); % 绘制三维表面图
    title('Surface Plot');

以下是三维绘图的常用操作:

操作示例说明
三维曲线图plot3(x, y, z);绘制三维曲线图
三维网格图mesh(X, Y, Z);绘制三维网格图
三维表面图surf(X, Y, Z);绘制三维表面图

五、绘图技巧

在绘图过程中,除了基本的绘制功能外,还可以通过一些技巧来美化图形并提高其可读性。以下是一些常用的绘图技巧。

  1. 图例
    • 使用 legend 函数添加图例,帮助说明图中的不同数据系列。

    x = 0:0.1:10;
    y1 = sin(x);
    y2 = cos(x);
    
    plot(x, y1, '-r', x, y2, '-b');
    legend('sin(x)', 'cos(x)'); % 添加图例
    title('Sin and Cos Functions');
    xlabel('x');
    ylabel('Function Values');
    grid on;

  1. 轴标签和数据标注
    • 使用 xlabelylabelzlabel 添加轴标签,使用 text 和 gtext 函数添加数据标注。

    plot(x, y1, '-r', x, y2, '-b');
    title('Sin and Cos Functions');
    xlabel('x');
    ylabel('Function Values');
    grid on;

    % 添加数据标注
    text(5, 0, 'sin(5) = 0'); % 在图中指定的位置添加文本
    gtext('cos(x)'); % 在图中通过鼠标点击指定位置添加文本

  1. 图形美化
    • 通过设置字体、线条粗细、颜色等属性来美化图形。

    plot(x, y1, '-r', 'LineWidth', 2); % 设置线条粗细
    hold on;
    plot(x, y2, '-b', 'LineWidth', 2);
    legend('sin(x)', 'cos(x)'); % 添加图例
    title('Sin and Cos Functions', 'FontSize', 14); % 设置标题字体大小
    xlabel('x', 'FontSize', 12); % 设置 x 轴标签字体大小
    ylabel('Function Values', 'FontSize', 12); % 设置 y 轴标签字体大小
    grid on;

  1. 保存图像
    • 使用 saveas 和 print 函数保存图形为图像文件。

    % 假设已经绘制了图形
    saveas(gcf, 'my_plot.png'); % 保存为 PNG 图像
    print('-dpng', 'my_plot.png'); % 保存为 PNG 图像
    print('-depsc', 'my_plot.eps'); % 保存为 EPS 图像

以下是绘图技巧的常用操作总结:

操作示例说明
图例legend('sin(x)', 'cos(x)');添加图例
轴标签xlabel('x'); ylabel('y');添加 x 轴和 y 轴标签
数据标注text(x, y, 'Text');在指定位置添加文本
设置字体xlabel('x', 'FontSize', 12);设置标签的字体大小
设置线条plot(x, y, 'LineWidth', 2);设置线条粗细
保存图像saveas(gcf, 'file.png');将图形保存为图像文件

六、绘图的高级技巧

为了进一步提升数据展示效果,Matlab 还提供了更多高级的绘图技巧,可以用来创建动画和交互式图形,并实现更复杂的图形美化。

  1. 创建动画
    • 通过一系列图形的连续绘制,可以创建动画效果。常用 getframe 和 movie 函数。

    fig = figure;
    for k = 1:50
        y = sin(2*pi*k/50 * x);
        plot(x, y);
        axis([0 10 -1 1]);
        M(k) = getframe(fig);
    end
    movie(fig, M, 2); % 播放动画,重复播放2次

  1. 交互式图形
    • Matlab 支持交互式图形,可以通过鼠标点击和拖动来调整图形,例如 datacursormode

    plot(x, y1, '-r', x, y2, '-b');
    title('Sin and Cos Functions');
    xlabel('x');
    ylabel('Function Values');
    grid on;

    % 启用数据提示模式
    datacursormode on;

  1. 复杂图形布局
    • 使用 tiledlayout 和 nexttile 函数,可以创建复杂的图形布局。

    t = tiledlayout(2, 2); % 创建2×2网格布局

    % 第一个子图
    nexttile;
    plot(x, y1);
    title('Sin(x)');

    % 第二个子图
    nexttile;
    plot(x, y2);
    title('Cos(x)');

    % 第三个子图
    nexttile;
    plot(x, y1 + y2);
    title('Sin(x) + Cos(x)');

    % 第四个子图
    nexttile;
    plot(x, y1 - y2);
    title('Sin(x) - Cos(x)');

以下是高级绘图技巧的常用操作总结:

操作示例说明
创建动画movie(fig, M, 2);创建并播放动画
交互式图形datacursormode on;启用数据提示模式
复杂图形布局tiledlayout(2, 2); nexttile;创建复杂的图形布局

七、实例示范:绘制多功能图形

综合应用以上绘图技巧,下面我们通过一个实际示例展示如何绘制一个包含多种图形和美化功能的图。

x = 0:0.01:10;
y1 = sin(x);
y2 = cos(x);
y3 = y1 .* y2;

% 创建图形布局
t = tiledlayout(2, 2, 'TileSpacing', 'Compact', 'Padding', 'Compact');

% 第一个子图:sin(x)
nexttile;
plot(x, y1, '-r', 'LineWidth', 2);
title('Sin(x)');
xlabel('x');
ylabel('Sin(x)');
grid on;

% 第二个子图:cos(x)
nexttile;
plot(x, y2, '-b', 'LineWidth', 2);
title('Cos(x)');
xlabel('x');
ylabel('Cos(x)');
grid on;

% 第三个子图:sin(x) * cos(x)
nexttile;
plot(x, y3, '-g', 'LineWidth', 2);
title('Sin(x) * Cos(x)');
xlabel('x');
ylabel('Sin(x) * Cos(x)');
grid on;

% 第四个子图:散点图
nexttile;
scatter(x, y3, 'filled');
title('Scatter Plot');
xlabel('x');
ylabel('Sin(x) * Cos(x)');
grid on;

% 添加统一标题和颜色图例
title(t, 'Multiple Functions and Scatter Plot');
legend(t.Children, 'Sin(x)', 'Cos(x)', 'Sin(x) * Cos(x)', 'Location', 'Best');

% 保存图像
saveas(gcf, 'multi_plot.png');

通过上述代码,我们创建了一个包含四个子图的综合图形,每个子图都展示了不同的数据并进行了美化处理。整个图形布局紧凑,标题和图例也得到了恰当的设置,并最终保存成了图像文件。

八、总结

本文详细介绍了 Matlab 中绘图与可视化的基本功能和技巧,包括二维绘图、三维绘图、图形属性设置、多图绘制、综合绘图技巧,以及最终通过一个综合实例展示如何应用这些技巧。通过这些设置,用户可以灵活地创建各种数据图形,以更直观地展示和分析数据。

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

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

相关文章

【Mysql】SQL约束、主键约束、非空、唯一、外键约束

SQL约束 什么是约束: 对表中的数据进行进一步的限制,从而保证数据的正确性、有效性、完整性. 违反约束的不正确数据,将无法插入到表中。 常见的约束 约束名 约束关键字 主键 primary key 唯一 unique 非空 not null 外键 foreign key 2.1 主键约束 什么是主键约束&a…

OpenXlab应用部署踩坑记录

参考博客: OpenXlab应用部署经验_xlabdemo-web-CSDN博客 书生浦语大模型实战营Day04OpenXLab 部署_openxlab.org.cn上传模型-CSDN博客 应用创建流程 | OpenXLab浦源 - 文档中心 1、已经在OpenXlab上上传好了模型 在上传好的模型查看一下如何使用模型 2、github…

github-chinese,跟英文GitHub说拜拜

背景 对于我们程序员来说,Github是一个常逛的web网站,里面学习资源众多,不管是查问题还是查资料都离不开他。 但是Github作为一个国际化的网站,语言主要是英语,所以对于一些英语似懂非懂的同学来说还是有一些难处。 想过找一个国内中文的Github作为一个平替网站,但是资…

高考志愿填报,理科生如何分析选专业?

理科生选择专业的范围更大一些,相比文科说理工科的院校也更多,如何选择适合自己的专业,这是一个比较重要的课题,毕竟大学专业直接关系到职业,是一辈子的大事。 那么理科究竟如何选择专业呢?需要从什么地方…

贪心算法—

贪心算法是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法。这种算法并不总是能找到全局最优解,但在某些问题上能提供足够好的解决方案。贪心算法的关键特性包括&#…

【TB作品】MSP430G2553单片机,转速测量系统,转速测量仪,霍尔传感器

文章目录 题目器件原理霍尔传感器测速原理:电机如何调节速度程序设计 实验报告实验题目实验目的实验器材实验原理霍尔传感器测速原理电机调速原理定时器中断原理 硬件连接软件设计定时器配置主程序中断处理程序 实验结果实验总结 题目 设计基于MSP430的转速测量仪的…

动手学深度学习(Pytorch版)代码实践 -深度学习基础-10权重衰减

10权重衰减 """ 正则化是处理过拟合的常用方法:在训练集的损失函数中加入惩罚项,以降低学习到的模型的复杂度。 保持模型简单的一个特别的选择是使用L2惩罚的权重衰减。这会导致学习算法更新步骤中的权重衰减。 """impor…

Python基础教程(三十):math模块

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 💝&#x1f49…

AudioSep:从音频中分离出特定声音(人声、笑声、噪音、乐器等)本地一键整合包下载

AudioSep是一种 AI 模型,可以使用自然语言查询进行声音分离。这一创新性的模型由Audio-AGI开发,使用户能够通过简单的语言描述来分离各种声音源。 比如在嘈杂的人流车流中说话的录音中,可以分别提取干净的人声说话声音和嘈杂的人流车流噪声。…

对于初学者,该如何选择大模型框架 LlamaIndex 与 LangChain ?

节前,我们星球组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、参加社招和校招面试的同学. 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总合集&…

任务3.8.4 利用RDD实现分组排行榜

文章目录 1. 任务说明2. 解决思路3. 准备成绩文件4. 采用交互式实现5. 采用Spark项目实战概述:使用Spark RDD实现分组排行榜任务背景任务目标技术选型实现步骤1. 准备数据2. 数据上传至HDFS3. 启动Spark Shell4. 读取数据生成RDD5. 数据处理6. 计算TopN7. 输出结果8…

「动态规划」如何求最长湍流子数组的长度?

78. 最长湍流子数组https://leetcode.cn/problems/longest-turbulent-subarray/description/ 给定一个整数数组arr,返回arr的最长湍流子数组的长度。如果比较符号在子数组中的每个相邻元素对之间翻转,则该子数组是湍流子数组。更正式地来说,…

算法期末整理

目录 一 算法概述 二 递归与分治策略 三 动态规划 四 贪心算法 五 回溯法 六 分支限界法 七 随机化算法 八 线性规划与网络流 一 算法概述 算法的概念 通俗地讲,算法是指解决问题的一种方法或一个过程。更严格地讲,算法是由若干条指令组成的有穷…

设计模式——职责链模式

职责链模式(Chain of Responsibility) 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连接成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。   发出请求的客户端并不知道职责链中哪一个对象…

python watchdog 配置文件热更新

目录 一、Watchdog示例 二、aiohttp服务配置热更新 在同事的golang代码中学习到了config.json热更新的功能,这里自己也学习了一下python写web服务的时候怎么来实现配置的热更新。主要是利用Watchdog这个第三方python库,来监控文件系统的改变&#xff0…

实战电商大数据项目搭建||电商大数据采集||电商API接口

我会提供给你大概1亿条真实的互联网用户上网数据,至于来源,我先不告诉你,绝对是你在网络上无法找到的宝贵数据源。 此外,还会给你提供一个基于当前数据特点而设计的大数据处理方案。 当然,为了防止用户的隐私部分被泄露…

每日优秀影视分享❗❗

一、热门电影推荐 《头脑特工队 2》:皮克斯再次为观众带来了这部经典动画的续集。 影片讲述了刚步入青春期的小女孩莱莉脑海中的复杂情绪进行的一场奇妙冒险。 这部电影不仅延续了前作的优秀品质,更在情感深度和视觉呈现上有了进一步的提升。 《艾尔登…

同时使用接口文档swagger和knife4j

项目场景: springboot项目中同时使用接口文档swagger和knife4j 问题描述 在实体类中设置了字段必填的属性,在访问接口文档时出现异常 实体类关键代码片段 /*** 部门表 sys_dept*/ public class SysDept extends BaseEntity {private static final lo…

Python基础入门

目录 1. 什么是Python? 2. 安装Python 3. Python基础语法 4. 数据结构 5. 文件操作 6. Python标准库 总结 1. 什么是Python? Python是一种高级编程语言,由Guido van Rossum于1991年发布。它以其简单易读的语法和强大的功能而闻名&…

高效22KW双向DCDC储能、充电电源模块项目设计开发

22kW 双向CLL谐振变换器的目标是输出电压范围宽、高效率和高功率密度的双向应用,如电动汽车车载充电器和储能系统。研究了一种新的灵活的 CLLC 双向谐振变换器增益控制方案,以便在充放电模式下实现高效率和宽电压增益范围。得益于 Wolfspeed C3MTM 1200V…