MATLAB-04-填充绘图与颜色映射

25 年 2 月 19 日 星期三
1445 字
8 分钟

MATLAB填充绘图与颜色映射

1. 使用 area 函数进行填充绘图

1.1 基本用法

  • area(x,y):当 y 为向量时,填充曲线 y=f(x)y = f(x) 与 x 轴之间的区域。

    matlab
    x = linspace(-10,10);
    area(x, x.^2)

    这会将 x2x^2 曲线与 x 轴间区域使用默认颜色填充。

1.2 常用 Name-Value 参数

  • "FaceColor":填充颜色(可用 RGB 三元组、十六进制、预定义字符等)。
  • "EdgeColor":边缘轮廓颜色。
  • "LineWidth":边缘线宽。
  • "LineStyle":边缘线型(实线、虚线、点线、无边等)。

示例:

matlab
x = linspace(-2*pi,2*pi);
area(x, sin(x), "EdgeColor", "r", "LineWidth", 2, "FaceColor", "y")

1.3 叠加 area 绘制多列数据

  • y 为矩阵时,area 会将矩阵的 各列 依次堆叠(stacked area)在同一坐标轴中:

    matlab
    x = 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 表示要使用的颜色(或顶点颜色数据)。

简单示例:

matlab
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) 设置为矩阵,每列对应一个多边形的所有顶点坐标。

  • 例如,下列操作绘制两个三角形,分别在同一坐标系中出现:

    matlab
    x = [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 轴封闭,如:

matlab
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() 翻转向量。

matlab
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)。

    matlab
    patch(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,不同坐标处产生渐层:

    matlab
    x = [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 颜色,例如:

    matlab
    mymap = [1 0 0; 1 1 0; 0 1 0; 0 0 1; 0 0 0];
    colormap(mymap)

7. 综合示例:绘制函数之间的区域并控制透明度

  1. 先画曲线 y=x2y = x^2 与 y=xy = \sqrt{x}:

    matlab
    x = linspace(0,2);
    y1 = x.^2; 
    y2 = sqrt(x);
    plot(x, y1, x, y2, "LineWidth", 3)
  2. 选取 x 在 [0,1.5] 范围上,填充二者包围的区域:

    matlab
    cond = (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")
  3. 效果:曲线与封闭区域叠加,且区域半透明可同时看到下方网格或其他元素。


8. 小结

Lecture 4 主要介绍了如何在 MATLAB 中对感兴趣的区域进行 颜色填充,包括:

  1. area:快速绘制函数与 x 轴、或多列数据堆叠面积。
  2. patch / fill:灵活创建多边形、填充其内部。可生成各类自定义形状及叠加多个多边形。
  3. 透明度与边框:通过 FaceAlpha, EdgeColor, LineStyle 等控制填充区域的外观。
  4. 颜色映射:可根据顶点数值插值生成渐变色,并可使用内置或自定义 colormap,配合 colorbar 进行可视化。

通过学习这些方法,可以绘制更丰富、个性化的图形,增强对数据分布或区域关系的可视化表达。


以上即为 Lecture 4 的核心笔记与要点整理。

文章标题:MATLAB-04-填充绘图与颜色映射

文章作者:DWHITE

文章链接:https://dr9k69ai79.github.io/MyBlog/posts/schoolcoursesnotes/2025_02/g0123_matlab/04_matlab填充绘图与颜色映射[复制]

最后修改时间:


商业转载请联系站长获得授权,非商业转载请注明本文出处及文章链接,您可以自由地在任何媒体以任何形式复制和分发作品,也可以修改和创作,但是分发衍生作品时必须采用相同的许可协议。
本文采用CC BY-NC-SA 4.0进行许可。