MATLAB作图实战

二维曲线

二维曲线是一种最为常见的曲线图表,它能反应两个变量之间的因果关系。

基本代码

>> x = linspace(1, 200, 100);
>> y1 = log(x) + 1;
>> y2 = log(x) + 2;
>> figure; % 创建一个图像窗口
>> plot(x, y1);
>> hold on % 多图共存于一个窗口
>> plot(x, y2);
>> hold off % 关闭多图共存于一个窗口
>> legend('y1', 'y2'); % 显示图例

代码运行结果如下图所示。

二维散点图

二维散点图常用来比较理论数据和实验数据的趋势关系。

>> x = linspace(1,200,100);
>> y1 = log(x) + 1;
>> y2 = y1 + rand(1, 100) - 0.5;
>> plot(x, y1, 'LineWidth', 2, 'Color', [0.21, 0.21, 0.67]);
>> hold on
>> plot(x, y2, 'o', 'LineWidth', 2, 'Color', [0.46, 0.63, 0.90], 'MarkerFaceColor', [0.35, 0.90, 0.89], 'MarkerEdgeColor', [0.18, 0.62, 0.17]);
>> hold off

代码运行结果如下图所示。

markerFaceColor用于设置内部填充颜色
markerEdgeColor用于设置外部边框颜色

二维渐变图

用不同的颜色、数据点大小表征不同的数值,更加直观。

scatter函数用法

  1. scatter(x, y)在向量x和y指定的位置创建一个包含圆形标记的散点图。
  2. 要绘制一组坐标,请将x和y指定为等长向量。
  3. 要在同一组坐标区上绘制多组坐标,请将x和y中至少一个指定为矩阵。
  4. scatter(x, y, sz)指定圆大小。要对所有圆使用相同的大小,请将sz指定为标量。要绘制不同大小的每个圆,请将sz指定为向量或矩阵。
  5. scatter(x, y, sz, c)指定圆颜色。您可以为所有圆指定为一种颜色,也可以更改颜色。例如,您可以通过将c指定为'red'来绘制所有红色圆。
  6. scatter(___, 'filled')填充圆。可以将'filled'选项与前面语法中任何的输入参数组合一起使用。

基本使用

>> x = linspace(0, 3 * pi, 200);
>> y = cos(x) + rand(1, 200);
>> sz = 25;
>> c = linspace(1, 10, length(x));
>> scatter(x, y, sz, c, 'filled');

代码运行结果如下图所示。

条形图

>> A = [60.689; 87.714; 143.1; 267.9515];
>> C = [127.5;160.4;231.9;400.2];
>> B = C - A;
>> figure
>> bar1 = bar([2:5:17], A, 'BarWidth', 0.2, 'FaceColor', 'k');
>> hold on
>> bar2 = bar([3:5:18], B, 'BarWidth', 0.2, 'FaceColor', [0.5,0.5,0.5]);
>> bar3 = bar([4:5:19], C, 'BarWidth', 0.2, 'FaceColor', 'w');
>> ylabel('耗时/s')
>> xlabel('GMM阶数')
>> legend('训练耗时', '测试耗时', '总耗时');
>> labelID = {'8阶', '16阶', '32阶', '64阶'};
>> set(gca, 'XTick', 3:5:20);
>> set(gca, 'XTickLabel', labelID);

代码运行结果如下图所示。

多y轴图

>> figure;
>> load('accidents.mat', 'hwydata')
>> ind = 1 : 51;
>> drivers = hwydata(:, 5);
>> yyaxis left
>> scatter(ind, drivers, 'LineWidth', 2);
>> title('Highway Data');
>> xlabel('States');
>> ylabel('Licensed Drivers(thousands)');
>> pop = hwydata(:, 7);
>> yyaxis right
>> scatter(ind, pop, 'LineWidth', 2);
>> ylabel('Vehicle Miles Traveled(millions)');

代码运行结果如下图所示。

矢量场图

二维场图

>> figure;
>> [x, y] = meshgrid(0:0.1:1, 0:0.1:1);
>> u = x;
>> v = -y;
% 该函数绘制箭头
>> quiver(x, y, u, v);

>> startx = 0.1:0.1:0.9;
>> starty = ones(size(startx));
>> streamline(x, y, u, v, startx, starty);

代码运行结果如下图所示。

三维矢量场图

>> figure;
>> [X, Y, Z] = peaks(30);
>> [U, V, W] = surfnorm(X, Y, Z);
>> quiver3(X, Y, Z, U, V, W, 0.5, 'b');
>> hold on
>> surf(X, Y, Z);
>> xlim([-3, 3]);
>> ylim([-3, 3.2]);
>> shading interp
>> hold off

代码运行结果如下图所示。

可以使用view函数进行视角转换。

view(0,90);
# 三维曲线 ```matlab >> figure >> t = 0: pi/20:10*pi; >> xt = sin(t); >> yt = cos(t); >> plot3(xt, yt, t, '-r'); ``` 代码运行结果如下图所示。

三维散点图

>> figure;
>> [X, Y, Z] = sphere(16);
>> x = [0.5 * X(:); 0.75 * X(:); X(:)];
>> y = [0.5 * Y(:); 0.75 * Y(:); Y(:)];
>> z = [0.5 * Z(:); 0.75 * Z(:); Z(:)];
>> S =  repmat([70,50,20], numel(X), 1);
>> C = repmat([1,2,3], numel(X), 1);
>> s = S(:);
>> c = C(:);
>> h = scatter3(x, y, z, s, c);
>> h.MarkerFaceColor = [0,0.5,0.5];

代码运行结果如下图所示。

三维伪彩图

>> [x, y, z] = peaks(30);
>> figure;
>> plot1 = subplot(1,2,1);
>> surf(x, y, z);
>> plot2 = subplot(1, 2, 2);
>> surf(x, y, z);
>> colormap(hot);
>> colormap(parula);
>> colormap(winter);
>> colormap(summer);
>> colormap(autumn);

代码运行结果如下图所示。

等高线图

二维等高线图

>> figure;
>> [X, Y, Z] = peaks;
>> subplot(2, 2, 1);
>> contour(X, Y, Z, 20, 'LineWidth', 1);
>> subplot(2, 2, 2);
>> contour(X, Y, Z, '--', 'LineWidth', 1);
>> subplot(2, 2, 3);
>> contour(X, Y, Z, [1,1], 'LineWidth', 1);
>> subplot(2, 2, 4);
>> x = -2:0.2:2;
>> y = -2:0.2:3;
>> [X, Y] = meshgrid(x, y);
>> Z = X .* exp(-X .^2 - Y .^2);
>> contour(X, Y, Z, 'ShowText', 'on', 'LineWidth', 1);

代码运行结果如下图所示。

三维等高线图

等高线填充图

>> figure;
>> subplot(2,2,1);
>> [X, Y, Z] = peaks(50);
>> contourf(X, Y, Z);
>> subplot(2,2,2);
>> contourf(X, Y, Z, '--');
>> subplot(2,2,3);
>> contourf(X, Y, Z, [2, 3], 'ShowText', 'on');
>> subplot(2,2,4);
>> contourf(X, Y, Z, [2,2]);

代码运行结果如下图所示。

热图

>> z = rand(50);
>> z(z>=0.0 & z < 0.6) = 0.5;
>> z(z >= 0.6 & z < 0.8) = 0.7;
>> z(z >= 0.8 & z <= 1) = 0.9;
>> for i = 1:30
z(randi(50,1,1) : end, i) = nan;
end
>> for i = 31: 50
z(30 + randi(20,1,1):end, i) = nan;
end
>> figure;
>> ax = pcolor(z);
>> view(0, 90);
>> ax.EdgeColor = [1,1,1];

代码运行结果如下图所示。

分子模型图

>> [x, y, z] = sphere(100);
>> C = 10;
>> H = 5;
>> figure;
>> surf(C * x, C * y, C * z, 'FaceColor', 'red', 'EdgeColor', 'none');
>> hold on
>> surf(H * x, H * y, H * z + 10, 'FaceColor', 'blue', 'EdgeColor', 'none');
>> surf(H * x - 4, H * y - 10, H * z - 3, 'FaceColor', 'blue', 'EdgeColor', 'none');
>> surf(H * x - 4, H * y + 10, H * z - 3, 'FaceColor', 'blue', 'EdgeColor', 'none');
>> axis equal off
>> light

使用light可以添加一个光源,使物体更加具有光泽和纹理,使用lighting none可以关闭光源。
代码运行结果如下图所示。

posted @ 2023-07-08 20:48  Gazikel  阅读(32)  评论(0编辑  收藏  举报