当前位置: 首页 > news >正文

使用MATLAB从Excel文件读取数据并绘制堆叠柱状图

在数据可视化中,堆叠柱状图是展示多个变量相对比例的非常有效的方法。它通过将每个数据系列堆叠在一起,帮助我们理解不同数据类别在总量中所占的份额。在这篇博客中,我们将学习如何使用MATLAB从Excel文件导入数据,并使用渐变色来绘制堆叠柱状图。我们还将探索如何选择和调整颜色,使得最终的图表更加美观和直观。

16e1a8e6a87a4e399f0759bbfc9ea13c.png

步骤 1:从Excel文件读取数据

在开始之前,我们假设你已经拥有一个Excel文件(如 your_data.xlsx),并且文件中包含了一些数据。MATLAB提供了非常方便的函数 readtable 来读取Excel文件,并将其存储为一个表格。

filename = 'your_data.xlsx';  % 请替换为你的Excel文件路径
data = readtable(filename);   % 读取Excel文件中的数据
y = data{:, 1:6};  % 假设数据存储在前6列中

在这段代码中,readtable 函数将Excel中的数据读取为表格格式。通过 data{:, 1:6} 我们提取了表格的前六列作为绘图数据。

步骤 2:选择并应用渐变色

为了让图表更加美观,我们可以使用MATLAB内置的渐变色 coolcool 是一个具有从蓝色到红色的渐变色图,通过从色图中选择多个颜色,我们可以得到一组适用于绘图的颜色。

map = colormap('cool');  % 选择cool色图
num_colors = 4;          % 选择4种颜色
C = map(round(linspace(1, size(map, 1), num_colors)), :);  % 从cool色图中选择4个颜色

这段代码首先通过 colormap('cool') 获取 cool 色图。然后,使用 linspace 均匀地选择4个颜色(你可以根据需求调整选择的颜色数量)。这些颜色将应用到堆叠柱状图中,帮助区分不同的数据系列。

步骤 3:绘制堆叠柱状图

MATLAB中有许多不同类型的图表,可以帮助我们展示数据。对于我们的需求,堆叠柱状图(stacked bar chart)是一个非常合适的选择。我们将使用自定义的颜色集来绘制图表,使用 Fbarstacked 函数绘制堆叠柱状图。

步骤 4:细节优化

为了确保图表的可读性和美观性,我们可以调整一些细节设置,例如坐标轴的样式、刻度和字体。下面的代码对图表的外观进行了优化。

步骤 5:导出图片

完成图表绘制后,我们可以将其导出为PNG格式的图片,方便后续使用或分享。MATLAB提供了 exportgraphics 函数,可以高效地导出图像文件。

完整代码:

clc;
clear;
close all;%% 数据准备
% 从Excel文件中读取数据
filename = 'data.xlsx'; % 请确保替换为你自己的Excel文件路径
data = readtable(filename);  % 假设数据存储在Excel表格中
y = data{:, 1:6};  % 假设数据存储在前6列中%% 颜色定义
% 使用cool渐变色图,提取多个颜色
map = colormap('cool');  % 选择cool色图
num_colors = 4;          % 选择4种颜色
C = map(round(linspace(1, size(map, 1), num_colors)), :);  % 从渐变色中取4个颜色%% 图片尺寸设置(单位:厘米)
figureUnits = 'centimeters';
figureWidth = 15;
figureHeight = 12;%% 窗口设置
figureHandle = figure('color','w');
set(gcf, 'Units', figureUnits, 'Position', [0 0 figureWidth figureHeight]);
hold on%% 冲击图绘制
GO = Fbarstacked(y, 0.4, C, 0.7);  % 创建堆叠柱状图
hTitle = title('Filled stacked bar chart');
hXLabel = xlabel('Samples');
hYLabel = ylabel('RMSE (m)');%% 细节优化
% 坐标区基本属性调整
set(gca, 'Box', 'off', ... % 边框'LineWidth', 1, ... % 线宽'XGrid', 'off', 'YGrid', 'on', ... % 网格'TickDir', 'out', 'TickLength', [.01 .01], ... % 刻度'XMinorTick', 'off', 'YMinorTick', 'off', ... % 小刻度'XColor', [.1 .1 .1], 'YColor', [.1 .1 .1]) % 坐标轴颜色
% 坐标轴刻度调整
set(gca, 'YTick', 0:0.3:1.5, ...'Ylim', [0 1.5], ...'Xlim', [0.5 6.5], ...'XTick', 1:7, ...'Xticklabel', {1:7}, ...'Yticklabel', {0:0.3:1.5})
% legend
hLegend = legend([GO(1), GO(2), GO(3), GO(4)], ...{'A', 'B', 'C', 'D'});
% 字体和字号
set(gca, 'FontName', 'Arial', 'FontSize', 10)
set([hLegend, hXLabel, hYLabel], 'FontName', 'Arial', 'FontSize', 11)
set(hTitle, 'FontSize', 12, 'FontWeight', 'bold')
% 背景颜色
set(gcf, 'Color', [1 1 1])%% 图片输出
exportgraphics(figureHandle, 'test.png', 'Resolution', 300)

 

function GO = Fbarstacked(y,bw,C,FaceAlpha)% 绘制堆叠图
x = 1:size(y,2);
GO = bar(x,y',bw,'stacked','EdgeColor','k');
% 绘制连接区块
conr = zeros(size(y,1)+1,size(y,2));
conr(2:end,:) = reshape([GO.YEndPoints]',size(y,2),size(y,1))';
for i = 1:length(GO)% 赋色GO(i).FaceColor = C(i,1:3);% 绘制填充for j = 1:size(y,2)-1L1 = min(conr(i,j),conr(i+1,j));L2 = max(conr(i,j),conr(i+1,j));R1 = min(conr(i,j+1),conr(i+1,j+1));R2 = max(conr(i,j+1),conr(i+1,j+1));fill([j+0.5*bw,j+1-0.5*bw,j+1-0.5*bw,j+0.5*bw],[L1,R1,R2,L2],...GO(i).FaceColor, ...'FaceAlpha',FaceAlpha, ...'EdgeColor','none');end
endend

 

 

 


http://www.mrgr.cn/news/79284.html

相关文章:

  • 【C++】static 知识整理 【静态与局部静态】
  • 软件工程 概述
  • 从零用java实现 小红书 springboot vue uniapp (2)主页优化
  • element-plus的el-tree的双向绑定
  • apisix lua插件开发记录
  • 关于TDSQL(MySQL)的简单知识分享
  • 数据结构之四:堆和二叉树
  • 数据库分库分表策略
  • flex布局容易忽略的角色作用
  • Android 第三方框架:RxJava:源码分析:观察者模式
  • 【原生js案例】webApp实现一个分享到的功能
  • SpringCloud 与 SpringBoot版本对应关系,以及maven,jdk
  • javascript-svg-在圆环上拖动并选中区域
  • lanqiaoOJ 3744:小蓝的智慧拼图购物 ← pair+优先队列
  • 行列式计算方法
  • c++笔记2
  • Elasticsearch数据迁移(快照)
  • Flume基础概念
  • Qt入门8——Qt文件
  • 初识树(二叉树,堆,并查集)
  • redis击穿,穿透,雪崩以及解决方案
  • Multimodal Few-Shot Learning with Frozen Language Models译文
  • 前端速通Blob、File、FileReader、ArrayBuffer、Base64...
  • Delphi-HTTP通讯及JSON解析
  • Yocto bitbake and codeSonar
  • 单链表---合并两个链表