首页 > 其他分享 >使用MATLAB从Excel文件读取数据并绘制堆叠柱状图

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

时间:2024-12-02 23:30:37浏览次数:4  
标签:... conr 读取数据 Excel 堆叠 柱状图 GO cool

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

步骤 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)-1
        L1 = 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
end

end

 

标签:...,conr,读取数据,Excel,堆叠,柱状图,GO,cool
From: https://blog.csdn.net/subject625Ruben/article/details/144201246

相关文章

  • 使用vue3-json-excel插件数据过长生成的数据变为科学计数法
    存在的问题:借用vue3-json-excel插件导出的xls的tagID这一项数据过长出现科学技术法。方法1.网上给出的办法是将长数字转换为字符串。我的数据tagID这个数据接口返回来的本就是字符串。所以改方法不行......
  • 基于Bootstrap3的简单柱状图表插件
    jchart是一款简单小巧的基于Bootstrap3.x的jquery柱状图表插件。该柱状图片表插件通过简单的设置,就可以生成非常漂亮的水平柱状图,并带有水平和垂直标签以及图表的头部和尾部。 在线演示  下载使用方法该jQuery柱状图插件可以通过javascript来调用,也可以直接使用HTML标签......
  • 在CentOS 7上导出Excel异常,提示(SunFontManager.java:377)
    【背景】操作系统:CentOS7项目:使用JDK11,EasyExcel3.2.1导出Excel【操作】web端导出Excel,日志提示异常,详细如下:Causedby:java.lang.InternalError:java.lang.reflect.InvocationTargetException atjava.desktop/sun.font.FontManagerFactory$1.run(FontManagerFactory.j......
  • python3通过驱动包连接oceanbase并将数据导出为excel
    1.创建文件夹driver并将驱动包放到项目中2.编写db_config配置#db_config.py#驱动包路径driver_path='../driver/oceanbase-client-2.2.9.jar'#连接参数url='jdbc:oceanbase://osidaoobdit01.cn-shanghai-finance-1.oceanbase.aliyuncs.com:1526/***?pool=false'......
  • 使用EasyExcel实现excel文件导入导出(附实战)
    什么是EasyExcelEasyExcel是一个由阿里巴巴开源的Java库,专注于处理大数据量的Excel文件读写操作。它以高性能、低内存占用和简单易用著称,特别适合处理大规模数据。EasyExcel通过异步处理和NIO技术优化了读写性能,同时提供了丰富的API和注解支持,使得数据导入导出变得简单快捷。......
  • 在Java中使用Apache POI导入导出Excel(一)
    Excel导入导出应用场景在日常的管理系统应用场景中,进行Excel表格的导入导出是比较常见的需求,比如电商平台、企业管理系统、库存管理系统、人事管理系统等等,基本都需要使用数据进行分析,需要将已有的数据通过Excel导入到系统中,或者将系统分析的结果导出到Excel文件中,可以说在这......
  • ECharts柱状图-极坐标系下的堆叠柱状图2,附视频讲解与代码下载
    引言: 在数据可视化的世界里,ECharts凭借其丰富的图表类型和强大的配置能力,成为了众多开发者的首选。今天,我将带大家一起实现一个柱状图图表,通过该图表我们可以直观地展示和分析数据。此外,我还将提供详细的视频讲解和代码下载链接,帮助大家快速上手。一、图表效果预览二、视......
  • easyexcel导出头部样式设置,多个tab导出,头部自定义RGB颜色
    alibabaeasyexcel版本3.0.5,poi版本4.1.2,导出头部样式设置,多个tab导出,头部自定义RGB颜色 效果,头部三行,三个tab  下面贴出代码:packagecom.alpha.erp.dto.accounts;importcom.alibaba.excel.metadata.Head;importcom.alibaba.excel.metadata.data.WriteCellDa......
  • 在使用 PowerShell 与 Excel COM 对象交互时,Get-Member 命令通常用于查看对象的成员(方
    在使用PowerShell与ExcelCOM对象交互时,Get-Member命令通常用于查看对象的成员(方法、属性等)。不过,Excel的COM对象可能会出现一些成员在使用Get-Member时无法完全显示的情况,尤其是在显示属性或方法时没有完全列出所有可用的成员。为了解决这个问题,可以使用以下几种方法来......
  • 使用Java导出excel内包含图片
    功能使用点最近公司需要开发一个数据表格导出excel的功能,普通的excel表格很好解决,网上有很多方法,下次写篇文章记录我的方法,但开发到有一个需求是excel是需要带图片的还是有些难度的,网上找了很多方案都无法适配,这里我记录下使用的方法。这里最后是在这篇文章上进行了优化,优化......