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
- 输入
daspect([.25, 1, 1.2]);并回车,数据纵横比改变,柱子变得又高又细,各柱子之间的差异看起来更大,但数据和旋转角度并未改变,只是数据的呈现方式改变了。 - 输入
daspect([.65, .5, 7]);并回车,此时数据点之间的差异看起来很小。 - 输入
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
- 输入
pbaspect([1.5, 1.5, 7]);并回车,数据点之间的差异看起来很大,绘图框和数据被锁定在一起,不用担心柱子超出绘图区域。 - 输入
pbaspect([4, 5, 1]);并回车,数据点看起来更接近。 - 输入
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的各种绘图功能和动画技术,我们可以更有效地展示和分析数据,为决策提供有力的支持。在实际应用中,要根据具体需求灵活运用这些功能,并不断探索和尝试新的方法,以获得更好的展示效果和分析结果。
MATLAB高级绘图与可视化技巧
超级会员免费看
37

被折叠的 条评论
为什么被折叠?



