使用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)-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

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/929980.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

书生浦语第四期--入门岛-第三关

文章目录 1.破冰任务:自我介绍1.1 create new fork1.2 git clone 自己的分支1.3 创建关联分支1.4提交修改 任务2 :创建自己的仓库 1.破冰任务:自我介绍 1.1 create new fork 创建一个自己的分支,在自己分支上进行修改&#xff0…

【AI系统】轻量级CNN模型新进展

CNN 模型小型化(下) 在本文会接着介绍 CNN 模型的小型化,除了第二篇文章提到的三个模型外,在本章节会继续介绍 ESPNet 系列,FBNet 系列,EfficientNet 系列和 GhostNet 系列。 ESPNet 系列 ESPNetV1 ESP…

鸿蒙HarmonyOS状态管理组件吐槽

吐槽一下鸿蒙系统设计的状态管理组件 一. 定义和作用 状态管理组件其本质作用用来修饰状态变量,这样可以观察到变量在组件内的改变,还可以在不同组件层级间传递,其设计初衷挺好。在声明式UI编程框架中,UI是程序状态的运行结果&a…

unicloud微信小程序云端一体项目DEMO

最近应客户需求,做了一个产品展示的云开发小程序,从了解云开发到应用到实际项目的产品demo,希望大家能从中获取到对自己有用的东西。 说下心得体会吧,一般小项目用这种云开发确实会减少很多开发成本,人力成本&#xf…

爬虫专栏第一篇:深入探索爬虫世界:基础原理、类型特点与规范要点全解析

本专栏会对爬虫进行从0开始的讲解,每一步都十分的细致,如果你感兴趣希望多多点赞收藏关注支持 简介:文章对爬虫展开多方面剖析。起始于爬虫的基本概念,即依特定规则在网络抓取信息的程序或脚本,在搜索引擎信息提取上作…

【Spring】Spring 整合 JUnit

JUnit 是 Java 中一个广泛使用的单元测试框架。它使用简单的注解和断言方法,使开发者能够轻松编写和运行测试用例。在使用 IDEA 创建的 Spring 项目中,JUnit 框架可以方便地进行整合。下面是整合的具体步骤。这里使用一个之前整合 MyBatis 时的 Spring 项…

MATLAB数学建模之画图汇总

MATLAB是一种强大的数学软件,广泛应用于工程计算、控制设计、信号处理等领域。在数学建模中,MATLAB的绘图功能可以帮助我们直观地展示数据和模型结果。 1. 二维数据曲线图 1.1 绘制二维曲线的基本函数 plot函数用于绘制二维平面上的线性坐标曲线图&am…

Linux 远程连接服务

远程连接服务器简介 什么是远程连接服务器 远程连接服务器通过文字或图形接口方式来远程登录系统,让你在远程终端前登录linux主机以取得可操 作主机接口(shell),而登录后的操作感觉就像是坐在系统前面一样。 远程连接服务器的功…

Prometheus 采集postgresql监控数据

postgres_exporter 前言 postgres_exporter 是一个用于监控 PostgreSQL 数据库的 Prometheus 导出器。它允许你收集有关 PostgreSQL 数据库性能和状态的指标,并将这些指标暴露给 Prometheus,从而可以在 Grafana 等可视化工具中进行展示和告警。 postgres_exporter download…

windows文件下换行, linux上不换行 解决CR换行符替换为LF notepad++

html文件是用回车换行的,在windows电脑上,显示正常。 文件上传到linux服务器后,文件不换行了。只有一行。而且相关js插件也没法正常运行。 用notepad查看,显示尾部换行符,是CR,这就是原因。CR是不被识别的。…

CTF show 文件上传篇(web151-170,看这一篇就够啦)

目录 一.前言 二.文件上传(web151-170) 1.web151(前端绕过) 1.1 编写一句话木马 1.2.寻找突破点 1.3.webshell连接 1.4 利用条件 2.web152(MIME头绕过) 2.1 知识点 2.2 绕过限制 2.3 利用条件 …

UE5 像素流进行内网https证书创建

确定证书需求 内网 HTTPS 通信通常需要以下内容: 自签名证书(适用于内网环境,不需要通过公开的证书颁发机构 CA) 或者通过内部的企业 CA 签发的证书(更安全)。 生成自签名证书 使用工具(如 Ope…

Android 图形系统之七:SurfaceFlinger

一. 引言 什么是 SurfaceFlinger?SurfaceFlinger 的核心作用和地位?为什么需要了解 SurfaceFlinger? 二. SurfaceFlinger 的基本概念 Surface 和 SurfaceFlinger 的关系SurfaceFlinger 与图形渲染(OpenGL ES 和 Vulkan&#xf…

大型制造企业IT蓝图、信息化系统技术架构规划与实施路线方案

关注 获取ppt​​​​​​全文,请关注作者

基于Pyhton的人脸识别(Python 3.12+face_recognition库)

使用Python进行人脸编码和比较 简介 在这个教程中,我们将学习如何使用Python和face_recognition库来加载图像、提取人脸编码,并比较两个人脸是否相似。face_recognition库是一个强大的工具,它基于dlib的深度学习模型,可以轻松实…

基于Unity实现的目标追踪任务指示模块

一、环境布置 第一人称模式: 二、新建脚本命名为任务指示器 Arrow:箭头图像target:指示目标8/9行通过lambad表达式,方便获取它们的对应属性静态的rect对象作用是简化代码 13:判断是否存在对象,防止空引用报错14:使用…

etcd资源超额

集群内apiserver一直重启,重启kubelet服务后查看日志发现一下报错: Error from server: etcdserver: mvcc: database space exceeded 报错原因: etcd服务未设置自动压缩参数(auto-compact) etcd 默认不会自动 compa…

关于项目二次开发那点事儿

以SpirngbootVue项目为例: 目前项目整体结构: 前端编译基本操作: # 安装依赖 npm install# 在 localhost:8080 启动项目 npm run serve# 运行项目中的构建脚本 npm run build npm run build 该命令执行成功之后,前端项目的目录下…

navicat连接mysql 8.0以上版本2059错误

安装了最新版本8.0.4的mysql之后,使用navicat链接提示以下错误。原因是因为mysql8.0 之前的版本中加密规则是 mysql_native_password,而 mysql8.0 之后的版本加密规则是caching_sha2_password 处理方案 解决方案1:下载安装最新版本navicat…

突破空间限制!从2D到3D:北大等开源Lift3D,助力精准具身智能操作!

文章链接:https://arxiv.org/pdf/2411.18623 项目链接:https://lift3d-web.github.io/ 亮点直击 提出了Lift3D,通过系统地提升隐式和显式的3D机器人表示,提升2D基础模型,构建一个3D操作策略。 对于隐式3D机器人表示&a…