Matlab绘图系列教程

您所在的位置:网站首页 有两列数据如何做成xy散点图 Matlab绘图系列教程

Matlab绘图系列教程

2024-07-04 05:30| 来源: 网络整理| 查看: 265

3. Matlab绘图指南:散点图

散点图是一种常用的数据可视化工具,能够展示数据之间的关系和分布情况。在Matlab中,绘制散点图非常简单,同时又具有丰富的功能和灵活的定制选项。本教程将逐步引导你学习Matlab中绘制散点图的方法和技巧,并通过详细的解释、示例和有趣的案例分析,帮助你全面了解散点图绘制的过程。

文章目录 3. Matlab绘图指南:散点图3.1 绘制简单散点图3.2 自定义样式和颜色3.3 添加趋势线3.4 数据分类标记3.5 动态散点图3.6 案例分析步骤 1: 生成虚拟数据步骤 2: 科研绘图风格配色方案步骤 3: 绘制散点图步骤 4: 添加标题和标签步骤 5: 添加趋势线步骤 6: 添加数据标签步骤 7: 设置图形属性 结论

3.1 绘制简单散点图

让我们从最简单的散点图开始,首先创建一组随机数据,并绘制散点图。

% 创建数据 x = randn(100, 1); y = randn(100, 1); % 绘制散点图 scatter(x, y); % 添加标题和标签 title('Simple Scatter Plot'); xlabel('X'); ylabel('Y');

在这里插入图片描述

在这个例子中,我们使用randn函数创建了两组100个随机数作为x和y坐标。然后,我们使用scatter函数绘制了散点图,并使用title、xlabel和ylabel函数添加了标题和标签。

3.2 自定义样式和颜色

除了基本的散点图,Matlab还提供了许多自定义选项,包括样式和颜色的设置。让我们继续优化散点图的样式和颜色。

% 创建数据 x = randn(100, 1); y = randn(100, 1); sizes = 30 + 100 * rand(1, 100); colors = rand(1, 100); % 绘制散点图 scatter(x, y, sizes, colors, 'filled'); % 添加标题和标签 title('Customized Scatter Plot'); xlabel('X'); ylabel('Y'); % 添加网格 grid on;

在这里插入图片描述

在这个例子中,我们通过定义sizes和colors数组,为每个数据点指定了大小和颜色。然后,我们在scatter函数中使用这些数组,并将参数'filled'设置为填充散点图。最后,我们添加了网格以增强图表的可读性。

3.3 添加趋势线

在散点图中添加趋势线能够更直观地展示数据的趋势和相关性。我们使用polyfit函数拟合数据并绘制趋势线。

% 生成数据 n = 100; % 数据点数量 heights = linspace(150, 190, n); % 生成身高数据,从150到190之间均匀分布 weights = heights * 0.6 + randn(1, n) * 5; % 根据身高生成体重数据,加入随机噪声 % 绘制散点图 scatter(heights, weights, 'filled', 'MarkerFaceColor', [0.2 0.6 0.9], 'MarkerEdgeColor', 'k'); % 添加趋势线 hold on; coefficients = polyfit(heights, weights, 1); fitted_values = polyval(coefficients, heights); plot(heights, fitted_values, 'r-', 'LineWidth', 2); hold off; % 添加标题和标签 title('Relationship between Height and Weight', 'FontSize', 14, 'FontWeight', 'bold'); xlabel('Height (cm)', 'FontSize', 12, 'FontWeight', 'bold'); ylabel('Weight (kg)', 'FontSize', 12, 'FontWeight', 'bold'); % 设置图形属性 ax = gca; ax.FontSize = 10; ax.FontWeight = 'bold'; ax.GridAlpha = 0.3; ax.GridLineStyle = ':'; box off;

在这里插入图片描述

在修改后的代码中,我们使用linspace函数生成身高数据,从150到190之间均匀分布。然后,根据身高生成体重数据,并加入随机噪声。这样生成的数据会更加符合线性关系。

通过上述代码,我们进行了以下调整和优化:

使用linspace函数生成均匀分布的身高数据,确保线性关系。根据身高数据生成体重数据,并添加随机噪声来增加数据的多样性。调整了散点图的样式,设置小球的填充颜色为淡蓝色,边缘颜色为黑色。修改了标题和标签的字体大小和粗细,使其更加易读和突出。设置了图形属性,包括坐标轴的字体大小和粗细,网格线的透明度和线型,去除了图框的边界。 3.4 数据分类标记

当数据具有分类属性时,我们可以使用不同的标记符号或颜色来区分不同的数据类别。

代码分析:

创建数据:

x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; y = [2, 4, 3, 1, 5, 7, 6, 9, 8, 10]; categories = ['A', 'A', 'B', 'B', 'A', 'B', 'A', 'B', 'B', 'A'];

在这一部分,我们定义了x和y坐标的数据,以及对应的数据分类categories。这些数据将用于后续的散点图绘制。

设置分类对应的颜色和标记符号:

colorMap = containers.Map({'A', 'B'}, {[0.8500, 0.3250, 0.0980], [0.3010, 0.7450, 0.9330]}); markerMap = containers.Map({'A', 'B'}, {'o', 'd'});

这部分代码使用了Matlab中的容器对象Map,用于将数据分类与对应的颜色和标记符号进行关联。在这个示例中,我们定义了’A’对应的颜色为橙色,'B’对应的颜色为天蓝色;'A’对应的标记符号为圆形,'B’对应的标记符号为星形。

绘制散点图:

figure; hold on; for i = 1:length(x) scatter(x(i), y(i), 100, 'MarkerFaceColor', colorMap(categories(i)), 'MarkerEdgeColor', 'k', 'Marker', markerMap(categories(i))); end hold off;

在这一部分,我们创建了一个新的图形窗口,并使用循环遍历每个数据点。通过调用scatter函数,我们绘制了每个数据点,并根据其对应的分类从colorMap和markerMap中获取相应的颜色和标记符号。'MarkerFaceColor’参数用于设置数据点的填充颜色,'MarkerEdgeColor’参数用于设置数据点的边界颜色,'Marker’参数用于设置数据点的标记符号。

添加标题和标签:

title('Scatter Plot with Data Categories'); xlabel('X'); ylabel('Y');

在最后一部分,我们使用title函数为散点图添加了标题,使用xlabel和ylabel函数分别设置了x和y轴的标签。

在这里插入图片描述

完整代码:

% 创建数据 x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; y = [2, 4, 3, 1, 5, 7, 6, 9, 8, 10]; categories = ['A', 'A', 'B', 'B', 'A', 'B', 'A', 'B', 'B', 'A']; % 设置分类对应的颜色和标记符号 colorMap = containers.Map({'A', 'B'}, {[0.8500, 0.3250, 0.0980], [0.3010, 0.7450, 0.9330]}); markerMap = containers.Map({'A', 'B'}, {'o', 'd'}); % 绘制散点图 figure; hold on; for i = 1:length(x) scatter(x(i), y(i), 100, 'MarkerFaceColor', colorMap(categories(i)), 'MarkerEdgeColor', 'k', 'Marker', markerMap(categories(i))); end hold off; % 添加标题和标签 title('Scatter Plot with Data Categories'); xlabel('X'); ylabel('Y'); 3.5 动态散点图

在某些情况下,我们希望能够动态地更新散点图以反映实时数据的变化。这在监测和实时数据分析中非常有用。

% 创建初始数据 x = []; y = []; % 创建散点图 h = scatter(x, y); title('Dynamic Scatter Plot'); xlabel('X'); ylabel('Y'); xlim([0, 10]); ylim([0, 10]); % 更新数据并刷新散点图 while true % 生成随机数据点 new_x = rand() * 10; new_y = rand() * 10; % 添加新数据点 x = [x, new_x]; y = [y, new_y]; % 更新散点图数据 set(h, 'XData', x, 'YData', y); % 延时一段时间 pause(0.5); end

在这个例子中,我们首先创建了空的x和y数组,并绘制了一个空的散点图。然后,我们进入一个循环,每次循环中生成随机的数据点,并将其添加到x和y数组中。通过使用set函数更新散点图的数据,我们实现了动态更新的效果。最后,使用pause函数进行一段时间的延迟,以控制更新的速度。

3.6 案例分析

我为你准备了一个更加丰富有趣的案例:探索电影评分与票房的关系。

在这个案例中,我们将使用通过程序生成的虚拟数据,模拟电影评分与票房之间的关系,并绘制散点图来进行可视化分析。

步骤 1: 生成虚拟数据

首先,我们需要一些数据来绘制散点图。让我们生成一些虚拟数据来模拟小球的评分、票房和大小。请记住,这只是为了演示目的,所以不用太认真哦!

% 生成虚拟数据 num_balls = 100; ratings = 5 + 1.5 * rand(num_balls, 1); % 小球的评分在5~6.5之间 box_office = 1000000 + 5000000 * rand(num_balls, 1); % 小球的票房在100万到600万之间 sizes = 20 + 80 * rand(num_balls, 1); % 小球的大小在20到100之间

在这段代码中,我们使用rand函数生成了一些随机数来模拟小球的评分、票房和大小。评分在5到6.5之间变化,票房在100万到600万之间变化,大小在20到100之间变化。

步骤 2: 科研绘图风格配色方案

好了,我们有了数据,接下来让我们来为我们的散点图选择一套科研绘图风格的配色方案。这样可以使我们的图形更加美观且符合科研绘图的风格。

% 科研绘图风格配色方案 colors = jet(num_balls);

这里,我们使用了jet函数来生成一套包含多个颜色的配色方案。num_balls变量是我们小球的数量,所以我们希望有足够多的颜色来区分每个小球。

步骤 3: 绘制散点图

现在,让我们开始绘制散点图吧!准备好你的眼睛,因为即将展现的图形将令你瞠目结舌!

% 绘制散点图 scatter(ratings, box_office, sizes, colors, 'filled', 'MarkerEdgeColor', 'k');

这段简短的代码就可以绘制出令人赞叹的散点图!scatter函数是绘制散点图的绝佳选择。我们传入评分、票房、大小和颜色的参数,并设置'filled'选项来填充小球,'MarkerEdgeColor'选项来设置小球边界的颜色为黑色。

步骤 4: 添加标题和标签

让我们给我们的图形添加一些标题和标签,这样观众们就不会迷失在数据的海洋中了。

% 添加标题和标签 title('Rating vs. Box Office', 'FontWeight', 'bold', 'FontSize', 14); xlabel('Ratings', 'FontWeight', 'bold', 'FontSize', 12); ylabel('Box Office (USD)', 'FontWeight', 'bold', 'FontSize', 12);

这段代码使用title、xlabel和ylabel函数分别添加标题和横纵轴的标签。我们还设置了一些选项,如'FontWeight'和'FontSize',以使标题和标签更加醒目。

步骤 5: 添加趋势线

嘿,你知道吗?我们还可以向散点图添加趋势线,这样我们就可以更好地了解数据的走势了。

% 添加趋势线 coefficients = polyfit(ratings, box_office, 1); x_fit = min(ratings):0.1:max(ratings); y_fit = polyval(coefficients, x_fit); hold on; plot(x_fit, y_fit, 'r--', 'LineWidth', 2); hold off;

在这段代码中,我们使用polyfit函数拟合评分和票房之间的线性趋势线。然后,我们使用polyval函数计算趋势线上的点的坐标。最后,我们使用plot函数绘制出这条趋势线,并设置颜色为红色,线型为虚线,线宽为2。

步骤 6: 添加数据标签

让我们进一步提升可读性!我们可以为每个小球添加一个数据标签,这样我们就可以更清楚地知道它们是谁了。

% 添加数据标签 for i = 1:num_balls text(ratings(i)+0.05, box_office(i), ['Ball ', num2str(i)], 'FontSize', 8, 'Color', colors(i, :)); end

这段简单的循环代码将为每个小球添加一个数据标签。text函数用于在指定位置绘制文本,我们设置了文本的位置为评分和票房的坐标加上一些微小的偏移量,以免标签与小球重叠。我们还设置了文本的字体大小为8,颜色与对应小球的颜色相同。

步骤 7: 设置图形属性

为了使我们的图形更加完美,我们还可以设置一些图形属性。这样,我们的散点图就会更加专业和吸引人!

% 设置图形属性 ax = gca; ax.FontSize = 10; ax.FontWeight = 'bold'; ax.GridAlpha = 0.3; ax.GridLineStyle = ':'; box off;

这段代码使用gca函数获取当前的坐标轴对象,并将其保存在变量ax中。然后,我们可以通过修改ax的属性来设置图形的字体大小、字体粗细、网格的透明度和线型。最后,我们使用box off函数去除图形的边框,使其更加简洁。

在这个例子中,我们生成了100部电影的虚拟数据,其中电影评分在5到6.5之间,票房在100万到600万之间。然后,我们使用这些数据绘制了散点图,并添加了趋势线来显示评分与票房之间的整体关系。

此外,我们还在每个数据点上添加了电影的编号,以便更好地展示每部电影的位置。

通过这个案例,我们可以探索电影评分与票房之间的大致关系,并进一步分析高评分电影是否在票房上表现更好,以及是否存在一些异常值。这样的可视化分析有助于电影行业的市场研究和决策。

在这里插入图片描述

完整代码:

% 生成虚拟数据 num_balls = 100; ratings = 5 + 1.5 * rand(num_balls, 1); % 小球的评分在5~6.5之间 box_office = 1000000 + 5000000 * rand(num_balls, 1); % 小球的票房在100万到600万之间 sizes = 20 + 80 * rand(num_balls, 1); % 小球的大小在20到100之间 % 科研绘图风格配色方案 colors = jet(num_balls); % 绘制散点图 scatter(ratings, box_office, sizes, colors, 'filled', 'MarkerEdgeColor', 'k'); % 添加标题和标签 title('Rating vs. Box Office', 'FontWeight', 'bold', 'FontSize', 14); xlabel('Ratings', 'FontWeight', 'bold', 'FontSize', 12); ylabel('Box Office (USD)', 'FontWeight', 'bold', 'FontSize', 12); % 添加趋势线 coefficients = polyfit(ratings, box_office, 1); x_fit = min(ratings):0.1:max(ratings); y_fit = polyval(coefficients, x_fit); hold on; plot(x_fit, y_fit, 'r--', 'LineWidth', 2); hold off; % 添加数据标签 for i = 1:num_balls text(ratings(i)+0.05, box_office(i), ['Ball ', num2str(i)], 'FontSize', 8, 'Color', colors(i, :)); end % 设置图形属性 ax = gca; ax.FontSize = 10; ax.FontWeight = 'bold'; ax.GridAlpha = 0.3; ax.GridLineStyle = ':'; box off; 结论

通过本教程,我们详细介绍了在Matlab中绘制散点图的方法和技巧。从基础绘图开始,我们逐步学习了如何自定义样式和颜色,以及如何添加趋势线、数据分类标记和绘制动态散点图。通过案例分析,我们展示了散点图在实际数据分析中的应用。希望这个教程能够帮助你全面了解Matlab绘制散点图的方法,并激发你在数据可视化方面的创造力。

本节涉及所有代码:

%% % 创建数据 x = randn(100, 1); y = randn(100, 1); % 绘制散点图 scatter(x, y); % 添加标题和标签 title('Simple Scatter Plot'); xlabel('X'); ylabel('Y'); %% % 创建数据 x = randn(100, 1); y = randn(100, 1); sizes = 30 + 100 * rand(1, 100); colors = rand(1, 100); % 绘制散点图 scatter(x, y, sizes, colors, 'filled'); % 添加标题和标签 title('Customized Scatter Plot'); xlabel('X'); ylabel('Y'); % 添加网格 grid on; %% % 生成数据 n = 100; % 数据点数量 heights = linspace(150, 190, n); % 生成身高数据,从150到190之间均匀分布 weights = heights * 0.6 + randn(1, n) * 5; % 根据身高生成体重数据,加入随机噪声 colors = rand(n, 3); % 生成随机颜色向量 % 绘制散点图 scatter(heights, weights, 60, colors, 'filled'); % 添加趋势线 hold on; coefficients = polyfit(heights, weights, 1); fitted_values = polyval(coefficients, heights); plot(heights, fitted_values, 'r-', 'LineWidth', 2); hold off; % 添加标题和标签 title('Relationship between Height and Weight', 'FontSize', 14, 'FontWeight', 'bold'); xlabel('Height (cm)', 'FontSize', 12, 'FontWeight', 'bold'); ylabel('Weight (kg)', 'FontSize', 12, 'FontWeight', 'bold'); % 设置图形属性 ax = gca; ax.FontSize = 10; ax.FontWeight = 'bold'; ax.GridAlpha = 0.3; ax.GridLineStyle = ':'; box off; %% % 创建数据 x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; y = [2, 4, 3, 1, 5, 7, 6, 9, 8, 10]; categories = ['A', 'A', 'B', 'B', 'A', 'B', 'A', 'B', 'B', 'A']; % 设置分类对应的颜色和标记符号 colorMap = containers.Map({'A', 'B'}, {[0.8500, 0.3250, 0.0980], [0.3010, 0.7450, 0.9330]}); markerMap = containers.Map({'A', 'B'}, {'o', 'd'}); % 绘制散点图 figure; hold on; for i = 1:length(x) scatter(x(i), y(i), 100, 'MarkerFaceColor', colorMap(categories(i)), 'MarkerEdgeColor', 'k', 'Marker', markerMap(categories(i))); end hold off; % 添加标题和标签 title('Scatter Plot with Data Categories'); xlabel('X'); ylabel('Y'); %% % 创建初始数据 x = []; y = []; % 创建散点图 h = scatter(x, y); title('Dynamic Scatter Plot'); xlabel('X'); ylabel('Y'); xlim([0, 10]); ylim([0, 10]); % 更新数据并刷新散点图 while true % 生成随机数据点 new_x = rand() * 10; new_y = rand() * 10; % 添加新数据点 x = [x, new_x]; y = [y, new_y]; % 更新散点图数据 set(h, 'XData', x, 'YData', y); % 延时一段时间 pause(0.5); end %% % 生成虚拟数据 num_balls = 100; ratings = 5 + 1.5 * rand(num_balls, 1); % 小球的评分在5~6.5之间 box_office = 1000000 + 5000000 * rand(num_balls, 1); % 小球的票房在100万到600万之间 sizes = 20 + 80 * rand(num_balls, 1); % 小球的大小在20到100之间 % 科研绘图风格配色方案 colors = jet(num_balls); % 绘制散点图 scatter(ratings, box_office, sizes, colors, 'filled', 'MarkerEdgeColor', 'k'); % 添加标题和标签 title('Rating vs. Box Office', 'FontWeight', 'bold', 'FontSize', 14); xlabel('Ratings', 'FontWeight', 'bold', 'FontSize', 12); ylabel('Box Office (USD)', 'FontWeight', 'bold', 'FontSize', 12); % 添加趋势线 coefficients = polyfit(ratings, box_office, 1); x_fit = min(ratings):0.1:max(ratings); y_fit = polyval(coefficients, x_fit); hold on; plot(x_fit, y_fit, 'r--', 'LineWidth', 2); hold off; % 添加数据标签 for i = 1:num_balls text(ratings(i)+0.05, box_office(i), ['Ball ', num2str(i)], 'FontSize', 8, 'Color', colors(i, :)); end % 设置图形属性 ax = gca; ax.FontSize = 10; ax.FontWeight = 'bold'; ax.GridAlpha = 0.3; ax.GridLineStyle = ':'; box off;


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3