本文将介绍如何在MATLAB中创建各种常用的图形。将涵盖以下内容:
-
基本的二维图形
- 折线图(Line Plot)
- 散点图(Scatter Plot)
- 条形图(Bar Plot)
- 面积图(Area Plot)
-
三维图形
- 三维曲面图(3D Surface Plot)
- 三维散点图(3D Scatter Plot)
- 三维条形图(3D Bar Plot)
-
特殊图形
- 极坐标图(Polar Plot)
- 热图(Heatmap)
- 雷达图(Radar Chart)
-
多图和子图
- 多图并排显示(Multiple Plots in One Figure)
- 子图(Subplots)
-
数据动画
- 动态更新图形(Animating Plots)
将为每种图形提供详细的示例代码,并解释每个图形的常见用法和调整技巧。
1. 基本的二维图形
折线图(Line Plot)
折线图是最常见的图形之一,用于显示数据点之间的连接。
cpp
% 生成数据
x = 0:0.1:10;
y = sin(x);
% 创建折线图
figure;
plot(x, y, '-o', 'LineWidth', 2, 'MarkerSize', 6, 'MarkerFaceColor', 'blue'); % 使用 'o' 标记数据点,设置线宽和标记大小
title('Sine Wave'); % 设置标题
xlabel('X-axis'); % 设置 X 轴标签
ylabel('Y-axis'); % 设置 Y 轴标签
legend({'sin(x)'}, 'Location', 'northeast'); % 添加图例
grid on; % 打开网格线
set(gca, 'FontSize', 12); % 设置坐标轴字体大小
散点图(Scatter Plot)
散点图用于显示两个变量之间的关系。
cpp
% 生成随机数据
x = randn(1, 100);
y = randn(1, 100);
c = sqrt(x.^2 + y.^2); % 用于着色的数据
% 创建散点图
figure;
scatter(x, y, 50, c, 'filled'); % '50' 表示标记大小,'c' 用于颜色,'filled' 表示填充标记
title('Scatter Plot with Color Mapping'); % 设置标题
xlabel('X-axis'); % 设置 X 轴标签
ylabel('Y-axis'); % 设置 Y 轴标签
colorbar; % 添加颜色条
legend({'Data Points'}, 'Location', 'northeast'); % 添加图例
grid on; % 打开网格线
set(gca, 'FontSize', 12); % 设置坐标轴字体大小
条形图(Bar Plot)
条形图用于比较不同类别的数据。
cpp
% 生成数据
categories = {'A', 'B', 'C', 'D'};
values = [10, 23, 17, 5];
% 创建条形图
figure;
bar(values, 'FaceColor', [0.2, 0.2, 0.5]); % 设置条形的颜色
set(gca, 'xticklabel', categories); % 设置 X 轴的类别标签
title('Bar Plot'); % 设置标题
xlabel('Categories'); % 设置 X 轴标签
ylabel('Values'); % 设置 Y 轴标签
legend({'Category Values'}, 'Location', 'northeast'); % 添加图例
grid on; % 打开网格线
set(gca, 'FontSize', 12); % 设置坐标轴字体大小
面积图(Area Plot)
面积图显示的是累积的数据,可以用来表示随时间变化的量。
Matlab
% 生成数据
x = 0:0.1:10;
y1 = sin(x);
y2 = cos(x);
% 创建面积图
figure;
area(x, [y1; y2]', 'LineWidth', 1.5); % 设置线宽
title('Area Plot of Sine and Cosine Functions'); % 设置标题
xlabel('X-axis'); % 设置 X 轴标签
ylabel('Y-axis'); % 设置 Y 轴标签
legend({'sin(x)', 'cos(x)'}, 'Location', 'northeast'); % 添加图例
grid on; % 打开网格线
set(gca, 'FontSize', 12); % 设置坐标轴字体大小
2. 三维图形
三维曲面图(3D Surface Plot)
三维曲面图用于显示数据的三维分布。
Matlab
% 生成数据
[x, y] = meshgrid(-3:0.1:3, -3:0.1:3);
z = peaks(x, y);
% 创建三维曲面图
figure;
surf(x, y, z, 'EdgeColor', 'none'); % 'EdgeColor' 设置为 'none' 来去掉网格线
title('3D Surface Plot of Peaks Function'); % 设置标题
xlabel('X-axis'); % 设置 X 轴标签
ylabel('Y-axis'); % 设置 Y 轴标签
zlabel('Z-axis'); % 设置 Z 轴标签
colorbar; % 添加颜色条
grid on; % 打开网格线
set(gca, 'FontSize', 12); % 设置坐标轴字体大小
view(3); % 设置三维视图
三维散点图(3D Scatter Plot)
三维散点图用于显示三维空间中的数据点。我们将数据点着色并添加图例。
Matlab
% 生成数据
x = randn(1, 100);
y = randn(1, 100);
z = randn(1, 100);
c = sqrt(x.^2 + y.^2 + z.^2); % 用于着色的数据
% 创建三维散点图
figure;
scatter3(x, y, z, 50, c, 'filled'); % '50' 表示标记大小,'c' 用于颜色,'filled' 表示填充标记
title('3D Scatter Plot with Color Mapping'); % 设置标题
xlabel('X-axis'); % 设置 X 轴标签
ylabel('Y-axis'); % 设置 Y 轴标签
zlabel('Z-axis'); % 设置 Z 轴标签
colorbar; % 添加颜色条
legend({'Data Points'}, 'Location', 'northeast'); % 添加图例
grid on; % 打开网格线
set(gca, 'FontSize', 12); % 设置坐标轴字体大小
view(3); % 设置三维视图
三维条形图(3D Bar Plot)
三维条形图用于显示三维数据的柱状图。
Matlab
% 生成数据
values = randi(10, 5, 5);
% 创建三维条形图
figure;
bar3(values, 'detached'); % 'detached' 选项将条形分离
title('3D Bar Plot'); % 设置标题
xlabel('X-axis'); % 设置 X 轴标签
ylabel('Y-axis'); % 设置 Y 轴标签
zlabel('Values'); % 设置 Z 轴标签
grid on; % 打开网格线
set(gca, 'FontSize', 12); % 设置坐标轴字体大小
3. 特殊图形
极坐标图(Polar Plot)
极坐标图用于表示极坐标数据。
Matlab
% 生成数据
theta = 0:0.01:2*pi;
rho = sin(2*theta).*cos(2*theta);
% 创建极坐标图
figure;
polarplot(theta, rho, 'LineWidth', 2); % 设置线宽
title('Polar Plot of sin(2\theta)cos(2\theta)'); % 设置标题
legend({'Polar Function'}, 'Location', 'northeast'); % 添加图例
set(gca, 'FontSize', 12); % 设置坐标轴字体大小
热图(Heatmap)
热图用于显示数据矩阵的值的热力分布。
Matlab
% 生成数据
data = rand(10, 10);
% 创建热图
figure;
heatmap(data, 'Colormap', parula, 'ColorbarVisible', 'on'); % 使用 parula 配色,打开颜色条
title('Heatmap of Random Data'); % 设置标题
xlabel('X-axis'); % 设置 X 轴标签
ylabel('Y-axis'); % 设置 Y 轴标签
set(gca, 'FontSize', 12); % 设置坐标轴字体大小
雷达图(Radar Chart)
雷达图用于显示多个变量的数据。
Matlab
% 生成数据
data = [5 3 9 1 6];
categories = {'Speed', 'Strength', 'Agility', 'Endurance', 'Intelligence'};
% 创建雷达图
figure;
polarplot(data, '-o', 'LineWidth', 2, 'MarkerSize', 6, 'MarkerFaceColor', 'blue'); % 设置线宽和标记大小
thetalim([0 360]); % 设置极坐标的角度范围
title('Radar Chart'); % 设置标题
ax = gca;
ax.ThetaTick = 0:72:360; % 设置类别的角度分布
ax.ThetaTickLabel = categories; % 设置类别标签
legend({'Attributes'}, 'Location', 'northeast'); % 添加图例
set(gca, 'FontSize', 12); % 设置坐标轴字体大小
4. 多图和子图
多图并排显示(Multiple Plots in One Figure)
在同一张图上显示多个图形。
Matlab
% 生成数据
x = 0:0.1:10;
y1 = sin(x);
y2 = cos(x);
% 创建多图
figure;
plot(x, y1, '-o', 'LineWidth', 2, 'MarkerSize', 6, 'MarkerFaceColor', 'red'); % 设置线宽和标记大小
hold on;
plot(x, y2, '-x', 'LineWidth', 2, 'MarkerSize', 6, 'MarkerFaceColor', 'green'); % 设置线宽和标记大小
hold off;
title('Multiple Plots of Sine and Cosine'); % 设置标题
xlabel('X-axis'); % 设置 X 轴标签
ylabel('Y-axis'); % 设置 Y 轴标签
legend({'sin(x)', 'cos(x)'}, 'Location', 'northeast'); % 添加图例
grid on; % 打开网格线
set(gca, 'FontSize', 12); % 设置坐标轴字体大小
子图(Subplots)
将多个图形显示在一个图形窗口中。
Matlab
% 生成数据
x = 0:0.1:10;
y1 = sin(x);
y2 = cos(x);
% 创建子图
figure;
subplot(2, 1, 1); % 创建第一个子图
plot(x, y1, '-o', 'LineWidth', 2, 'MarkerSize', 6, 'MarkerFaceColor', 'blue'); % 设置线宽和标记大小
title('Subplot 1: Sine Function'); % 设置标题
xlabel('X-axis'); % 设置 X 轴标签
ylabel('Y-axis'); % 设置 Y 轴标签
grid on; % 打开网格线
legend({'sin(x)'}, 'Location', 'northeast'); % 添加图例
set(gca, 'FontSize', 12); % 设置坐标轴字体大小
subplot(2, 1, 2); % 创建第二个子图
plot(x, y2, '-x', 'LineWidth', 2, 'MarkerSize', 6, 'MarkerFaceColor', 'red'); % 设置线宽和标记大小
title('Subplot 2: Cosine Function'); % 设置标题
xlabel('X-axis'); % 设置 X 轴标签
ylabel('Y-axis'); % 设置 Y 轴标签
grid on; % 打开网格线
legend({'cos(x)'}, 'Location', 'northeast'); % 添加图例
set(gca, 'FontSize', 12); % 设置坐标轴字体大小
5. 数据动画
动态更新图形(Animating Plots)
使用MATLAB的动画功能动态更新图形。
Matlab
% 生成数据
x = 0:0.1:10;
% 创建动画
figure;
h = plot(x, sin(x), '-o', 'LineWidth', 2, 'MarkerSize', 6, 'MarkerFaceColor', 'blue'); % 设置线宽和标记大小
title('Animating Plot of Sine Wave'); % 设置标题
xlabel('X-axis'); % 设置 X 轴标签
ylabel('Y-axis'); % 设置 Y 轴标签
grid on; % 打开网格线
set(gca, 'FontSize', 12); % 设置坐标轴字体大小
% 动画循环
for k = 1:100
y = sin(x + 0.1*k); % 动态更新 y 数据
set(h, 'YData', y); % 更新图形数据
drawnow; % 实时刷新图形
pause(0.1); % 暂停以控制动画速度
end