MATLAB填充绘图与颜色映射
1. 使用 area
函数进行填充绘图
1.1 基本用法
-
area(x,y)
:当y
为向量时,填充曲线 y=f(x)y = f(x) 与 x 轴之间的区域。matlabx = linspace(-10,10); area(x, x.^2)
这会将 x2x^2 曲线与 x 轴间区域使用默认颜色填充。
1.2 常用 Name-Value
参数
"FaceColor"
:填充颜色(可用 RGB 三元组、十六进制、预定义字符等)。"EdgeColor"
:边缘轮廓颜色。"LineWidth"
:边缘线宽。"LineStyle"
:边缘线型(实线、虚线、点线、无边等)。
示例:
x = linspace(-2*pi,2*pi);
area(x, sin(x), "EdgeColor", "r", "LineWidth", 2, "FaceColor", "y")
1.3 叠加 area
绘制多列数据
-
当
y
为矩阵时,area
会将矩阵的 各列 依次堆叠(stacked area)在同一坐标轴中:matlabx = linspace(0, 10); y1 = 2*x; % 第一列 y2 = 5*x + 7; % 第二列 Y = [y1.' y2.']; area(x, Y)
这会生成 堆叠面积图,显示每列在对应 x 处的累积值。
2. 使用 patch
函数自定义多边形
2.1 基本用法
patch(x, y, c)
:在(x, y)
所围成的多边形区域进行颜色填充。(x,y)
通常要闭合多边形,即最后一个点自动连接到第一个点,若不想自动闭合,可在最后一个坐标插入NaN
。c
表示要使用的颜色(或顶点颜色数据)。
简单示例:
x = [0 2 2 0];
y = [0 0 3 3];
patch(x, y, "b") % 绘制蓝色矩形
会在坐标系中绘制顶点分别为 (0,0), (2,0), (2,3), (0,3) 的 实心蓝色多边形。
2.2 多个多边形
-
可以将
(x, y)
设置为矩阵,每列对应一个多边形的所有顶点坐标。 -
例如,下列操作绘制两个三角形,分别在同一坐标系中出现:
matlabx = [0 2; 2 3; 1 5]; % 两列共用三行 y = [0 2; 0 4; 3 5]; patch(x, y, "g") % 两个绿色三角形
2.3 高级用法:Faces / Vertices
- 可以用
patch("Faces",F, "Vertices",V)
指定多面体或多个多边形,其中:V
:顶点坐标表(每行一个顶点,如 [xi,yi][x_i, y_i])。F
:顶点连接情况(每行表示一个面,多边形的顶点序号,若边数不等则可用NaN
补齐)。
- 好处:若有大量重复坐标,可以在
Vertices
中只存储唯一的顶点,然后通过Faces
记录多边形的连线关系,减少数据重复。
3. 使用 fill
函数快速填充
fill(x, y, c)
:功能与patch
类似,但会 先清空坐标轴 再绘制。如果需要在当前图上叠加多边形,不想清除已有内容,则可用hold on
或直接使用patch
。- 绘制多个多边形:
fill(x1, y1, c1, x2, y2, c2, ...)
可以一次性绘制多个填充区域。
4. 在曲线下方/曲线之间区域填充
4.1 基于 patch
实现
对给定函数曲线 y=f(x)y = f(x),若要填充其下方区域,可将曲线坐标与 x 轴封闭,如:
x = linspace(0,1);
y = x.^2;
X = [x, 1]; % 补上 x=1
Y = [y, 0]; % y轴对应点改到 0 闭合
patch(X, Y, "b")
绘制完后可再用 hold on
在该图上 plot(x, y)
叠加显示曲线本身。
4.2 填充曲线与曲线间的区域
若要填充两条函数曲线之间的区域(如 y1y_1 与 y2y_2),可拼接 x1, y1
和翻转后的 x2, y2
实现多边形坐标。常用的技巧是 fliplr()
翻转向量。
x1 = linspace(0,1);
y1 = x1.^2;
x2 = [0 1];
y2 = x2/2;
X = [x1, fliplr(x2)];
Y = [y1, fliplr(y2)];
patch(X, Y, "b")
5. 透明度与边缘样式
5.1 FaceAlpha
-
设置 面(填充区域)的不透明度(0~1)。
matlabpatch(X, Y, "y", "FaceAlpha", 0.5, "EdgeColor", "none")
表示半透明填充且不显示轮廓线。
5.2 EdgeColor
, LineStyle
- 与之前所述类似,可指定
EdgeColor
(如"r"
,[0.2 0.3 0.7]
,"none"
等)与LineStyle
(如"--"
,":"
,"none"
)。
6. 颜色映射与 colorbar
6.1 基于顶点的渐变色
-
patch(x, y, c)
若c
是与每个顶点对应的颜色数值,则可在同一多边形内展示 渐变色 效果。- 默认情况下,
FaceColor = "interp"
/EdgeColor = "interp"
可以让颜色在各顶点间插值过渡。
- 默认情况下,
-
例如:给三角形的顶点分别赋予 0, 0.5, 1,不同坐标处产生渐层:
matlabx = [0 2 2]; y = [0 0 2]; c = [0; 0.5; 1]; % 每个顶点对应一个数值 patch(x, y, c) colorbar
此时可用
colormap
切换不同内置/自定义调色板。
6.2 修改或自定义 colormap
-
colormap(winter)
,colormap(hot)
,colormap(jet)
… 切换至特定内置颜色方案。 -
自定义:传入一个
n×3
矩阵,每行对应一个 RGB 颜色,例如:matlabmymap = [1 0 0; 1 1 0; 0 1 0; 0 0 1; 0 0 0]; colormap(mymap)
7. 综合示例:绘制函数之间的区域并控制透明度
-
先画曲线 y=x2y = x^2 与 y=xy = \sqrt{x}:
matlabx = linspace(0,2); y1 = x.^2; y2 = sqrt(x); plot(x, y1, x, y2, "LineWidth", 3)
-
选取 x 在
[0,1.5]
范围上,填充二者包围的区域:matlabcond = (x >= 0 & x <= 1.5); X = [x(cond), fliplr(x(cond))]; Y = [y1(cond), fliplr(y2(cond))]; patch(X, Y, "y", "FaceAlpha", 0.5, "EdgeColor", "none")
-
效果:曲线与封闭区域叠加,且区域半透明可同时看到下方网格或其他元素。
8. 小结
Lecture 4 主要介绍了如何在 MATLAB 中对感兴趣的区域进行 颜色填充,包括:
area
:快速绘制函数与 x 轴、或多列数据堆叠面积。patch
/fill
:灵活创建多边形、填充其内部。可生成各类自定义形状及叠加多个多边形。- 透明度与边框:通过
FaceAlpha
,EdgeColor
,LineStyle
等控制填充区域的外观。 - 颜色映射:可根据顶点数值插值生成渐变色,并可使用内置或自定义
colormap
,配合colorbar
进行可视化。
通过学习这些方法,可以绘制更丰富、个性化的图形,增强对数据分布或区域关系的可视化表达。
以上即为 Lecture 4 的核心笔记与要点整理。