27、MATLAB高级绘图指南

MATLAB高级绘图与可视化技巧

MATLAB高级绘图指南

1. 颜色映射

MATLAB默认的配色方案并非唯一选择,你可以使用 colormap() 函数更改颜色。例如,输入 colormap('cool') 并回车,颜色会相应改变。你还可以通过多种技术创建自定义颜色映射,更多信息可查看 colormap() 文档

2. 数据纵横比(daspect)

屏幕上3D效果的呈现取决于数据纵横比, daspect() 函数可用于获取当前纵横比并设置新的纵横比。纵横比衡量了x、y和z轴之间的相互关系,例如 [1, 2, 3] 的纵横比表示x轴每1个单位,y轴有2个单位,z轴有3个单位。以下是操作步骤:
1. 输入 YSource = [1, 3, 5; 3, 7, 9; 5, 7, 11]; 并回车,MATLAB会为你创建一个数据源。
2. 输入 Bar1 = bar3(YSource); 并回车,你会看到一个3D柱状图出现。
3. 输入 rotate(Bar1, [0, 0, 1], 270); 并回车,柱状图旋转,以便你更轻松地查看各个柱子。
4. 输入 daspect() 并回车,输出包含三个值,分别代表x、y和z轴的值,例如:

ans =
    0.3571    0.2679    2.1670
  1. 输入 daspect([.25, 1, 1.2]); 并回车,数据纵横比改变,柱子变得又高又细,各柱子之间的差异看起来更大,但数据和旋转角度并未改变,只是数据的呈现方式改变了。
  2. 输入 daspect([.65, .5, 7]); 并回车,此时数据点之间的差异看起来很小。
  3. 输入 daspect('auto') 并回车,数据纵横比恢复到原始状态。

3. 绘图框纵横比(pbaspect)

绘图框纵横比修改的是包含整个绘图的绘图框,而不是数据本身,但数据的外观仍会改变。以下是操作步骤:
1. 输入 YSource = [1, 3, 5; 3, 7, 9; 5, 7, 11]; 并回车,创建数据源。
2. 输入 Bar1 = bar3(YSource); 并回车,出现3D柱状图。
3. 输入 rotate(Bar1, [0, 0, 1], 270); 并回车,柱状图旋转以便查看。
4. 输入 pbaspect() 并回车,会得到三个值,代表x、y和z轴,但数值与数据纵横比不同,例如:

ans =
    2.8000    4.0000    2.4721
  1. 输入 pbaspect([1.5, 1.5, 7]); 并回车,数据点之间的差异看起来很大,绘图框和数据被锁定在一起,不用担心柱子超出绘图区域。
  2. 输入 pbaspect([4, 5, 1]); 并回车,数据点看起来更接近。
  3. 输入 pbaspect('auto'); 并回车,绘图纵横比恢复到原始状态。

4. 特殊绘图类型

4.1 误差条形图(errorbar())

误差条形图展示了沿直线每个数据点的置信水平,通过查看偏差量,观察者可以判断数据的准确性。创建误差条形图的步骤如下:
1. 输入 YSource = [1, 2, 4, 7, 5, 3]; 并回车,这些值代表实际数据点。
2. 输入 ESource = [.5, 1, 1, 1.5, 1, .5]; 并回车,这些值代表每个数据点的误差量。
3. 输入 EBar1 = errorbar(YSource, ESource); 并回车,创建误差条形图。

4.2 帕累托图(pareto())

帕累托图按出现频率降序显示度量关系,有助于确定解决问题的重点。创建帕累托图的步骤如下:
1. 输入 YSource = [1, 2, 4, 2, 6, 2, 3, 4, 1, 2]; 并回车,定义数据源。
2. 输入 Par1 = pareto(YSource); 并回车,创建帕累托图。

4.3 阶梯图(stairs())

阶梯图常用于显示数字采样系统的时间历史,展示连续变化的结果和变化发生的精确时间间隔。创建阶梯图的步骤如下:
1. 输入 YSource = [1, 2, 4, 7, 5, 3]; 并回车,代表实际数据点。
2. 输入 XSource = datenum('9/15/2014'):1:datenum('9/20/2014'); 并回车,代表数据点收集的日期。
3. 输入 Stair1 = stairs(XSource, YSource); 并回车,开始绘制阶梯图。
4. 输入 set(gca, 'XTick', XSource); 并回车,使每个数据点对应一个日期,且日期间隔为一天。
5. 输入 datetick('x', 6, 'keeplimits', 'keepticks'); 并回车,绘图中显示包含月和日的实际日期字符串。

4.4 杆状图(stem())

杆状图以x轴为起点显示数值在一定范围内的分布,每个数据点是从x轴到该点值的线段端点。创建杆状图的步骤如下:
1. 输入 YSource = [-10:1:10]; 并回车,定义数据源。
2. 输入 stem(YSource); 并回车,创建杆状图。
3. 输入 set(gca, 'YLim', [-11, 11]); 并回车,设置y轴范围以显示所有端点。

4.5 填充图像(fill)

使用MATLAB可以创建图像,只需提供描述图像形状的数学模型。以绘制正方形为例,步骤如下:
1. 输入 XSource = [1, 1, 5, 5]; 并回车。
2. 输入 YSource = [1, 5, 5, 1]; 并回车, XSource YSource 包含正方形四个角的坐标。
3. 输入 fill(XSource, YSource, 'b'); 并回车,创建蓝色填充的正方形,但图像会占据整个绘图区域。
4. 输入 set(gca, 'XLim', [0, 6]); 并回车。
5. 输入 set(gca, 'YLim', [0, 6]); 并回车,使图像清晰地显示在绘图中心。

颜色选择对于绘图很重要,以下是 fill() 函数常见的颜色选择:
| RGB Value | Color Letter | Description |
| — | — | — |
| [1 1 0] | y | 黄色 |
| [1 0 1] | m | 品红色 |
| [0 1 1] | c | 青色 |
| [1 0 0] | r | 红色 |
| [0 1 0] | g | 绿色 |
| [0 0 1] | b | 蓝色 |
| [1 1 1] | w | 白色 |
| [0 0 0] | k | 黑色 |

4.6 箭头图(quiver())

箭头图显示由u和v分量定义的速度向量,在x和y坐标点处的情况。创建箭头图的步骤如下:
1. 输入 XSource = [1, 1, 1, 1, 1, 1]; 并回车。
2. 输入 YSource = [1, 1, 1, 1, 1, 1]; 并回车,定义向量的起点。
3. 输入 USource = [1, 2, 3, 4, 5, 6]; 并回车。
4. 输入 VSource = [6, 5, 4, 3, 2, 1]; 并回车,定义速度向量在x - y平面的位置。
5. 输入 quiver(XSource, YSource, USource, VSource); 并回车,创建箭头图。

4.7 羽毛图(feather())

羽毛图与箭头图类似,但向量沿x轴均匀分布。创建羽毛图的步骤如下:
1. 输入 USource = [-6:1:6]; 并回车,创建u。
2. 输入 VSource = [6:-1:-6]; 并回车,创建v。
3. 输入 feather(USource, VSource) 并回车,查看羽毛图。

4.8 罗盘图(compass())

罗盘图提供与羽毛图和箭头图类似的视图,但所有值从一个起点发出,输出类似极坐标图。创建罗盘图的步骤如下:
1. 输入 USource = [1, -4, 3, -7, 8, -9, 2, 4, -2, 3, -5, 8, 9]; 并回车,创建u。
2. 输入 VSource = [12:-2:-12]; 并回车,创建v。
3. 输入 compass(USource, VSource) 并回车,查看罗盘图。

4.9 极坐标图(polar())

极坐标图接受极坐标作为输入,并在笛卡尔平面上绘制。创建极坐标图的步骤如下:
1. 输入 theta = 0:0.01:2*pi; 并回车,创建theta。
2. 输入 rho = 1 - theta; 并回车,创建rho。
3. 输入 polar(theta, rho) 并回车,显示极坐标图。

4.10 玫瑰图(rose())

玫瑰图显示以弧度表示的角度分布,输出是依赖于极坐标图的角度直方图。创建玫瑰图的步骤如下:
1. 输入 theta = 0:0.01:2*pi; 并回车,创建theta。
2. 输入 rose(theta, 36) 并回车,显示玫瑰图。

4.11 稀疏模式图(spy())

稀疏模式图接受稀疏矩阵作为输入,分析其模式并显示。使用 bucky() 函数创建稀疏矩阵进行分析的步骤如下:
输入 spy(bucky()); 并回车,查看稀疏矩阵的模式图。

5. 动画

动画可以展示数据随时间的变化,但使用不当会影响数据展示。MATLAB提供了三种动画类型:
- 静态图像回放 :最古老和常见的动画形式,通过快速连续播放一系列静态图像创建连续信息的错觉。适用于复杂绘图展示,屏幕更新快,动画流畅,但不动态,无法在展示过程中更新数据。
- 对象更新 :通过修改对象属性创建动画,可调整数据值、配色方案等。灵活性高,对外部资源依赖少且速度快,但需要编写大量代码,信息比静态图像回放动态,但比数据更新静态。
- 数据更新 :将绘图对象直接连接到数据源,数据源变化时绘图也随之变化。最动态,常用于模拟实时数据,但对数据展示的控制不如对象更新,通常需要外部数据源,展示过程中可能出现连接问题。

graph LR
    A[动画类型] --> B[静态图像回放]
    A --> C[对象更新]
    A --> D[数据更新]
    B --> B1[适用于复杂绘图]
    B --> B2[屏幕更新快]
    B --> B3[不动态]
    C --> C1[灵活性高]
    C --> C2[需大量代码]
    D --> D1[最动态]
    D --> D2[需外部数据源]

6. 总结与应用建议

6.1 绘图类型总结

在前面的内容中,我们介绍了多种MATLAB绘图类型,每种类型都有其独特的用途和适用场景,以下是对这些绘图类型的总结:
| 绘图类型 | 用途 | 创建步骤 |
| — | — | — |
| 误差条形图(errorbar()) | 展示沿直线每个数据点的置信水平,辅助判断数据准确性 | 1. 输入实际数据点 YSource ;2. 输入误差量 ESource ;3. 输入 errorbar(YSource, ESource) 创建图形 |
| 帕累托图(pareto()) | 按出现频率降序显示度量关系,确定解决问题的重点 | 1. 定义数据源 YSource ;2. 输入 pareto(YSource) 创建图形 |
| 阶梯图(stairs()) | 显示数字采样系统的时间历史,展示连续变化结果和变化发生的精确时间间隔 | 1. 输入实际数据点 YSource ;2. 输入日期 XSource ;3. 输入 stairs(XSource, YSource) 开始绘图;4. 设置日期显示;5. 显示实际日期字符串 |
| 杆状图(stem()) | 以x轴为起点显示数值在一定范围内的分布 | 1. 定义数据源 YSource ;2. 输入 stem(YSource) 创建图形;3. 设置y轴范围 |
| 填充图像(fill) | 根据数学模型创建图像 | 1. 输入x、y坐标;2. 输入 fill(XSource, YSource, '颜色') 创建图形;3. 设置x、y轴范围 |
| 箭头图(quiver()) | 显示由u和v分量定义的速度向量在x和y坐标点处的情况 | 1. 输入向量起点 XSource YSource ;2. 输入速度向量位置 USource VSource ;3. 输入 quiver(XSource, YSource, USource, VSource) 创建图形 |
| 羽毛图(feather()) | 向量沿x轴均匀分布的速度向量图 | 1. 创建u、v向量;2. 输入 feather(USource, VSource) 查看图形 |
| 罗盘图(compass()) | 所有值从一个起点发出的类似极坐标图,用于显示方向数据 | 1. 创建u、v向量;2. 输入 compass(USource, VSource) 查看图形 |
| 极坐标图(polar()) | 接受极坐标作为输入,在笛卡尔平面上绘制 | 1. 创建theta、rho;2. 输入 polar(theta, rho) 显示图形 |
| 玫瑰图(rose()) | 显示以弧度表示的角度分布,输出角度直方图 | 1. 创建theta;2. 输入 rose(theta, 分箱数) 显示图形 |
| 稀疏模式图(spy()) | 接受稀疏矩阵作为输入,分析其模式并显示 | 输入 spy(bucky()) 查看图形 |

6.2 纵横比调整总结

数据纵横比( daspect() )和绘图框纵横比( pbaspect() )的调整可以改变图形的外观,从而影响对数据的感知。以下是对这两种纵横比调整的总结:
| 纵横比类型 | 作用 | 调整步骤 |
| — | — | — |
| 数据纵横比(daspect()) | 修改数据在x、y、z轴上的比例关系,影响图形中数据元素的形状 | 1. 创建数据源;2. 绘制3D柱状图;3. 旋转图形;4. 获取当前纵横比;5. 设置新的纵横比;6. 恢复原始纵横比 |
| 绘图框纵横比(pbaspect()) | 修改包含整个绘图的绘图框的比例关系,使绘图框和数据锁定在一起 | 1. 创建数据源;2. 绘制3D柱状图;3. 旋转图形;4. 获取当前纵横比;5. 设置新的纵横比;6. 恢复原始纵横比 |

6.3 应用建议

  • 绘图类型选择 :在选择绘图类型时,应根据数据的特点和分析目的来决定。如果需要展示数据的置信水平,可选择误差条形图;如果要确定解决问题的重点,帕累托图是不错的选择;对于数字采样系统的时间历史展示,阶梯图更为合适。
  • 纵横比调整 :当需要强调数据之间的差异或使图形更符合特定的展示需求时,可以调整数据纵横比或绘图框纵横比。但要注意,调整纵横比只是改变了数据的呈现方式,数据本身并未改变。
  • 动画应用 :在使用动画时,要确保动画服务于数据展示,而不是成为展示的焦点。根据具体需求选择合适的动画类型,如复杂绘图展示可选择静态图像回放,需要灵活调整对象属性可选择对象更新,模拟实时数据则选择数据更新。

7. 实际案例分析

7.1 数据误差分析案例

假设我们正在进行一项实验,收集了一系列数据,但对这些数据的准确性存在一定的疑问。我们可以使用误差条形图来分析数据的可靠性。

% 实际数据点
YSource = [1.2, 2.5, 4.1, 7.3, 5.2, 3.4];
% 误差量
ESource = [0.6, 1.1, 1.2, 1.6, 1.3, 0.7];
% 创建误差条形图
EBar1 = errorbar(YSource, ESource);

通过观察误差条形图,我们可以看到每个数据点的误差范围。如果某个数据点的误差范围较大,说明该数据的准确性较低,可能需要进一步收集数据或改进测量方法。

7.2 问题重点确定案例

在一个项目中,我们收集了不同问题出现的次数,希望确定哪些问题是需要重点解决的。可以使用帕累托图来进行分析。

% 数据源
YSource = [3, 7, 2, 5, 1, 4];
% 创建帕累托图
Par1 = pareto(YSource);

帕累托图会按出现频率降序排列问题,我们可以根据图形快速确定哪些问题出现的频率较高,从而将资源集中在解决这些重点问题上。

7.3 实时数据展示案例

假设我们正在监测一个物理系统的实时数据,需要将数据的变化实时展示出来。可以使用数据更新类型的动画来实现。

% 创建一个简单的数据源
t = 0:0.1:10;
y = sin(t);
% 创建绘图对象
plot(t, y);
% 模拟实时数据更新
for i = 1:length(t)
    % 更新数据
    y_new = sin(t + i/10);
    % 更新绘图
    set(gca, 'YData', y_new);
    % 暂停一段时间以观察变化
    pause(0.1);
end

在这个案例中,我们将绘图对象连接到数据源,随着数据源的变化,绘图也会实时更新,从而展示出数据随时间的变化情况。

8. 常见问题与解决方法

8.1 绘图显示问题

  • 问题描述 :绘图时图形显示不完整或比例失调。
  • 解决方法 :可以通过调整数据纵横比( daspect() )或绘图框纵横比( pbaspect() )来解决。例如,如果图形在某个方向上显示过窄,可以适当调整该方向的纵横比。
% 调整数据纵横比
daspect([1, 2, 1]);
% 调整绘图框纵横比
pbaspect([1.5, 1.5, 1]);

8.2 动画卡顿问题

  • 问题描述 :使用动画时屏幕更新缓慢,动画卡顿。
  • 解决方法 :如果使用的是静态图像回放,检查图像的分辨率和帧率,尽量降低分辨率或提高帧率;如果使用的是对象更新或数据更新,检查代码是否存在性能瓶颈,优化代码逻辑,减少不必要的计算。

8.3 颜色选择问题

  • 问题描述 :绘图时颜色不符合预期或无法选择特定颜色。
  • 解决方法 :参考颜色选择表,使用正确的颜色代码或RGB值。例如,如果需要绘制蓝色图形,可以使用 'b' [0 0 1]
% 使用颜色代码绘制蓝色图形
fill(XSource, YSource, 'b');
% 使用RGB值绘制棕色图形
fill(XSource, YSource, [0.5, 0.25, 0]);

9. 未来发展趋势

随着数据分析和可视化需求的不断增长,MATLAB绘图功能也在不断发展。未来可能会出现以下趋势:
- 更丰富的绘图类型 :为了满足不同领域的需求,可能会引入更多新颖的绘图类型,如基于机器学习算法的可视化图形,用于展示复杂的数据模式和关系。
- 更强大的动画功能 :动画将更加智能化和交互性,例如可以根据用户的操作实时调整动画效果,提供更直观的数据变化展示。
- 与其他工具的集成 :MATLAB可能会更好地与其他数据分析和可视化工具集成,如Python的可视化库,方便用户在不同环境中进行数据处理和展示。

graph LR
    A[未来发展趋势] --> B[更丰富的绘图类型]
    A --> C[更强大的动画功能]
    A --> D[与其他工具的集成]
    B --> B1[机器学习可视化图形]
    C --> C1[智能化交互动画]
    D --> D1[与Python库集成]

通过掌握MATLAB的各种绘图功能和动画技术,我们可以更有效地展示和分析数据,为决策提供有力的支持。在实际应用中,要根据具体需求灵活运用这些功能,并不断探索和尝试新的方法,以获得更好的展示效果和分析结果。

内容概要:本文档介绍了基于3D FDTD(时域有限差分)方法在MATLAB平台上对微带线馈电的矩形天线进行仿真分析的技术方案,重点在于模拟超MATLAB基于3D FDTD的微带线馈矩形天线分析[用于模拟超宽带脉冲通过线馈矩形天线的传播,以计算微带结构的回波损耗参数]宽带脉冲信号通过天线结构的传播过程,并计算微带结构的回波损耗参数(S11),以评估天线的匹配性能和辐射特性。该方法通过建立三维电磁场模型,精确求解麦克斯韦方程组,适用于高频电磁仿真,能够有效分析天线在宽频带内的响应特性。文档还提及该资源属于一个涵盖多个科研方向的综合性MATLAB仿真资源包,涉及通信、信号处理、电力系统、机器学习等多个领域。; 适合人群:具备电磁场与微波技术基础知识,熟悉MATLAB编程及数值仿真的高校研究生、科研人员及通信工程领域技术人员。; 使用场景及目标:① 掌握3D FDTD方法在天线仿真中的具体实现流程;② 分析微带天线的回波损耗特性,优化天线设计参数以提升宽带匹配性能;③ 学习复杂电磁问题的数值建模与仿真技巧,拓展在射频与无线通信领域的研究能力。; 阅读建议:建议读者结合电磁理论基础,仔细理解FDTD算法的离散化过程和边界条件设置,运行并调试提供的MATLAB代码,通过调整天线几何尺寸和材料参数观察回波损耗曲线的变化,从而深入掌握仿真原理与工程应用方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值