Matlab绘图系列教程-基础绘图:散点图 (scatter函数 )

3. Matlab绘图指南:散点图

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

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函数绘制了散点图,并使用titlexlabelylabel函数添加了标题和标签。

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;

在这里插入图片描述

在这个例子中,我们通过定义sizescolors数组,为每个数据点指定了大小和颜色。然后,我们在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之间均匀分布。然后,根据身高生成体重数据,并加入随机噪声。这样生成的数据会更加符合线性关系。

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

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

3.4 数据分类标记

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

代码分析:

  1. 创建数据:

    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。这些数据将用于后续的散点图绘制。

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

    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’对应的标记符号为星形。

  3. 绘制散点图:

    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’参数用于设置数据点的标记符号。

  4. 添加标题和标签:

    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);

这段代码使用titlexlabelylabel函数分别添加标题和横纵轴的标签。我们还设置了一些选项,如'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;

  • 33
    点赞
  • 243
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
scatter函数MATLAB中用于绘制散点图函数。它可以在图窗中创建一个散点图,并根据提供的数据绘制散点。scatter函数有多种用法和参数选项。 例如,可以使用scatter(x, y)来绘制一个简单的散点图,其中x和y是数据点的坐标。可以使用scatter(x, y, sz)来指定散点的大小,sz是一个标量或与x和y相同大小的向量,用于指定每个散点的大小。还可以使用scatter(x, y, sz, c)来指定散点的颜色,c可以是一个颜色名称的字符串或与x和y相同大小的向量,用于指定每个散点的颜色。 此外,还可以使用scatter函数的其他参数选项来自定义散点图的样式。例如,可以使用's'参数来指定散点图的标记形状,使用'filled'参数来填充散点图的标记。 如果需要在一个图窗中创建多个子图,并在每个子图中绘制散点图,可以使用subplot函数来创建子图,并使用scatter函数在每个子图中绘制散点图。 综上所述,scatter函数MATLAB中用于绘制散点图函数,可以根据提供的数据绘制散点,并可以通过参数选项来自定义散点图的样式。 #### 引用[.reference_title] - *1* *2* [Matlab散点图绘制详细教程scatter函数(附matlab代码)](https://blog.csdn.net/iii66yy/article/details/124259514)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [matlab中绘制三维散点图scatter3函数的使用方法(附matlab代码)](https://blog.csdn.net/iii66yy/article/details/125625599)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

图灵猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值