Matlab绘图系列教程 |
您所在的位置:网站首页 › 有两列数据如何做成xy散点图 › Matlab绘图系列教程 |
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 |