MATLAB二维绘图全解析
立即解锁
发布时间: 2025-09-06 01:47:36 阅读量: 16 订阅数: 43 AIGC 


MATLAB工程应用精要
# MATLAB二维绘图全解析
## 1. 子图绘制
### 1.1 子图布局函数
MATLAB中,`tiledlayout`函数可将绘图窗口分割成`m`行`n`列的网格,之后使用`nexttile`函数指定在哪个网格中绘图。例如,将绘图窗口分割成上下两个图:
```matlab
x = 0:pi/20:2*pi;
tiledlayout(2,1)
nexttile
plot(x,sin(x))
title("Sin(x)")
xlabel("x-axis"), ylabel("y-axis"),grid minor
nexttile
plot(x,sin(2*x))
title("Sin(2x)")
xlabel("x-axis"), ylabel("y-axis"), grid minor
```
此代码运行后,第一个图绘制在上方网格,第二个图绘制在下方网格。
### 1.2 动态布局
若不确定特定任务需要多少网格,可使用`tiledlayout("flow")`。第一个图会在只有一个网格的窗口中创建,随着更多图的创建,窗口会自动调整网格数量。示例代码如下:
```matlab
x = 0:pi/20:2*pi;
tile_name = tiledlayout("flow");
nexttile
plot(x,sin(x))
title("Sin(x)"),xlabel("x-axis"), ylabel("y-axis")
nexttile
plot(x,sin(x).^2+cos(x))
title("Trig Function"),xlabel("x-axis"), ylabel("y-axis")
nexttile
plot(x,2+3*x-8*x.^2+1.5*x.^3)
title("Polynomial"),xlabel("x-axis"), ylabel("y-axis")
title(tile_name,["Some Sample Plots";"Created Using the Flow Option"])
```
### 1.3 跨网格绘图
`nexttile`函数还允许用户跨多个网格绘图,使每个图的大小不必相同。例如,若要将最后一个图填充窗口的下半部分:
```matlab
tile_name = tiledlayout(2,2);
x = 0:pi/20:2*pi;
nexttile
plot(x,sin(x))
title("Sin(x)"),xlabel("x-axis"), ylabel("y-axis")
nexttile
plot(x,sin(x).^2+cos(x))
title("Trig Function"),xlabel("x-axis"), ylabel("y-axis")
nexttile(3,[1,2])
plot(x,2+3*x-8*x.^2+1.5*x.^3)
title("Polynomial"),xlabel("x-axis"), ylabel("y-axis")
title(tile_name,["Some Sample Plots";"Created Using the Designated Option"])
```
## 2. 其他二维绘图类型
### 2.1 极坐标图
MATLAB提供了极坐标绘图功能,使用`polarplot`函数。例如:
```matlab
x = 0:pi/100:pi;
y = sin(x);
polarplot(x,y)
title("The sine function in polar coordinates is a circle")
```
此代码绘制了正弦函数的极坐标图。
### 2.2 对数图
对数图在变量变化范围大或数据呈指数变化时很有用。MATLAB提供了以下对数绘图命令:
| 命令 | 功能 |
| ---- | ---- |
| `plot(x,y)` | 生成向量`x`和`y`的线性图 |
| `semilogx(x,y)` | `x`轴使用对数刻度,`y`轴使用线性刻度绘图 |
| `semilogy(x,y)` | `x`轴使用线性刻度,`y`轴使用对数刻度绘图 |
| `loglog(x,y)` | `x`轴和`y`轴都使用对数刻度绘图 |
示例代码如下:
```matlab
t=tiledlayout("flow");
x = 0:0.5:50;
y = 5*x.^2;
nexttile
plot(x,y)
title("Polynomial - linear/linear")
ylabel("y-axis"), grid
nexttile
semilogx(x,y)
title("Polynomial - log/linear")
ylabel("y-axis"), grid
nexttile
semilogy(x,y)
title("Polynomial - linear/log")
xlabel("x-axis"), ylabel("y-axis"), grid
nexttile
loglog(x,y)
title("Polynomial - log/log")
xlabel("x-axis"), ylabel("y-axis"), grid
m = "A Polynomial Plotted Using Multiple Graphing Strategies";
title(t,m)
```
### 2.3 柱状图和饼图
MATLAB提供了多种绘制柱状图和饼图的函数,如下表所示:
| 函数 | 功能 |
| ---- | ---- |
| `bar(x)` | 当`x`为向量时,生成垂直柱状图;当`x`为二维数组时,按行分组数据 |
| `barh(x)` | 当`x`为向量时,生成水平柱状图;当`x`为二维数组时,按行分组数据 |
| `bar3(x)` | 生成三维柱状图 |
| `bar3h(x)` | 生成三维水平柱状图 |
| `pie(x)` | 生成饼图,数组中的每个元素代表饼图的一片 |
| `pie3(x)` | 生成三维饼图,数组中的每个元素代表饼图的一片 |
| `histogram(x)` | 生成直方图 |
示例代码如下:
```matlab
clear, clc, clf
x = [1,2,5,4,8];
y = [x;1:5];
t=tiledlayout("flow");
nexttile
bar(x),title("A Bar Graph of Vector x")
nexttile
bar(y),title("A Bar Graph of Array y")
nexttile
bar3(y),title("A Three-dimensional Bar Graph")
nexttile
pie(x),title("A Pie Chart of x")
title(t,"Sample Bar Graphs and Pie Charts")
```
### 2.4 直方图
直方图用于展示一组值的分布,在统计分析中很有用。MATLAB的`histogram`函数可自动确定合适的分组数量,也允许用户指定分组数量或分组边界。例如:
```matlab
x = [100,95,74,87,22,78,34,82,93,88,86,69,55,72];
histogram(x)
```
若要指定分组数量为5:
```matlab
histogram(x, 5)
```
若要指定分组边界:
```matlab
edges=[0,60,70,80,90,100];
histogram(x,edges)
```
若要使分组面积与分组内的值数量成比例:
```matlab
histogram(x,edges,"normalization","countdensity")
```
### 2.5 双`y`轴图
当两个`y`值的数量级差异较大时,使用双`y`轴图可以更清晰地展示数据。例如:
```matlab
x = 0:pi/20:2*pi;
y1 = sin(x);
y2 = exp(x);
tiledlayout(1,2)
nexttile
plot(x,y1,x,y2)
xlabel("x-axis"), ylabel("y-axis")
nexttile
yyaxis left
plot(x,y1)
xlabel("x-axis"),ylabel("sin function")
yyaxis right
plot(x,y2)
ylabel("
```
0
0
复制全文
相关推荐






