MATLAB | 怎样绘制这样的环形柱状图

Hey, 各位又是好久不见,最近忙到后台消息都有些来不及看,非常抱歉,今天带来一个环形柱状图绘制的简易小代码,绘制效果如下:


下面直接给出完整代码,替换一下数据即可,代码都有注释的:

完整代码

环形柱状图

% author : slandarer

% 生成随机数据
rng(13)
Data = randi([1,100], [6,1]);

% 数据名称
% 'Class-1','Class-2',... ...,'Class-6'
Name  = compose('Class-%d', 1:6);

% 配色
% 更多配色详见 Zhaoxu Liu / slandarer (2024). 
% 2000 palettes (https://www.mathworks.com/matlabcentral/fileexchange/126969-2000-palettes), 
% MATLAB Central File Exchange.
CList = [0.8941    0.8706    0.8078
    0.9255    0.7412    0.5843
    0.6078    0.6941    0.7333
    0.4745    0.6745    0.7412
    0.2039    0.3961    0.4588
    0.0431    0.2588    0.1294];
% CList = colorDemo(11)

% 数据展示范围及刻度
YLim = [0,100];
YTick = [];

% =========================================================================
% 开始绘图
if isempty(YLim) || isempty(YTick)
    tFig = figure('Visible', 'off');
    tAx = axes('Parent',tFig);
    tAx.NextPlot = 'add';
    bar(tAx, Data)
    if isempty(YLim), YLim = tAx.YLim; else, tAx.YLim = YLim; end
    if isempty(YTick), YTick = tAx.YTick; end
    close(tFig)
end
% 创建图窗
fig = figure('Units','normalized', 'Position',[.2,.1,.5,.8]);
ax = axes('Parent',fig, 'Position',[0,0,1,1]);
ax.NextPlot = 'add';
ax.XColor = 'none';
ax.YColor = 'none';
ax.DataAspectRatio = [1,1,1];
% 绘制坐标轴和刻度线
TLim = [pi/2, -pi - pi/6];
t01 = linspace(0, 1, 80);
N = length(Data);
tT = t01.*diff(TLim) + TLim(1);
tX = cos(tT).*(N + N/2 + 1);
tY = sin(tT).*(N + N/2 + 1);
plot(ax, tX, tY, 'LineWidth',.8, 'Color','k')
ax.XLim = [-1,1].*(N + N/2 + 2);
ax.YLim = [-1,1].*(N + N/2 + 2);
tT = (YTick - YLim(1))./diff(YLim).*diff(TLim) + TLim(1);
tX = [cos(tT).*(N + N/2 + 1); cos(tT).*(N + N/2 + 1 + N/50); tT.*nan];
tY = [sin(tT).*(N + N/2 + 1); sin(tT).*(N + N/2 + 1 + N/50); tT.*nan];
plot(ax, tX(:), tY(:), 'LineWidth',.8, 'Color','k')
for i = 1:length(YTick)
    iT = tT(i); iR = iT/pi*180;
    YTickHdl = text(ax, tX(2,i), tY(2,i),...
        num2str(YTick(i)), 'FontName','Times New Roman', 'FontSize',13, 'HorizontalAlignment','center');
    if mod(iR, 360) > 180 && mod(iR, 360) < 360
        YTickHdl.Rotation = iR + 90;
        YTickHdl.VerticalAlignment = 'top';
    else
        YTickHdl.Rotation = iR - 90;
        YTickHdl.VerticalAlignment = 'bottom';
    end
end
% 绘制柱状图
for i = 1:N
    tR = [(N + N/2 + 1 - i - .4).*ones(1, 80), (N + N/2 + 1 - i + .4).*ones(1, 80)];
    tT = t01.*(Data(i) - YLim(1))./diff(YLim).*diff(TLim) + TLim(1);
    tX = cos([tT, tT(end:-1:1)]).*tR;
    tY = sin([tT, tT(end:-1:1)]).*tR;
    fill(ax, tX, tY, CList(i,:), 'LineWidth',1, 'EdgeColor','k')
end
% 绘制数据名称
for i = 1:N
    text(ax, 0, N + N/2 + 1 - i, [Name{i},'  '], 'FontName','Times New Roman',...
        'FontSize',16, 'HorizontalAlignment','right');
end

堆叠环形柱状图

clc; clear
% author : slandarer

% 生成随机数据
rng(6)
Data = randi([1,100], [6,5]);

% 数据名称
% 'Class-1','Class-2',... ...,'Class-6'
Name1 = compose('Class-%d', 1:6);
Name2 = compose('Prop-%d', 1:5);

% 配色
% 更多配色详见 Zhaoxu Liu / slandarer (2024). 
% 2000 palettes (https://www.mathworks.com/matlabcentral/fileexchange/126969-2000-palettes), 
% MATLAB Central File Exchange.
CList = [0.8941    0.8706    0.8078
    0.9255    0.7412    0.5843
    0.6078    0.6941    0.7333
    0.4745    0.6745    0.7412
    0.2039    0.3961    0.4588
    0.0431    0.2588    0.1294];
% CList = colorDemo(11)

% 数据展示范围及刻度
YLim = [];
YTick = [];

% =========================================================================
% 开始绘图
if isempty(YLim) || isempty(YTick)
    tFig = figure('Visible', 'off');
    tAx = axes('Parent',tFig);
    tAx.NextPlot = 'add';
    bar(tAx, Data, 'stacked')
    if isempty(YLim), YLim = tAx.YLim; else, tAx.YLim = YLim; end
    if isempty(YTick), YTick = tAx.YTick; end
    close(tFig)
end
% 创建图窗
fig = figure('Units','normalized', 'Position',[.2,.1,.5,.8]);
ax = axes('Parent',fig, 'Position',[0,0,1,1]);
ax.NextPlot = 'add';
ax.XColor = 'none';
ax.YColor = 'none';
ax.DataAspectRatio = [1,1,1];
% 绘制坐标轴和刻度线
TLim = [pi/2, -pi - pi/6];
t01 = linspace(0, 1, 80);
N = size(Data, 1);
tT = t01.*diff(TLim) + TLim(1);
tX = cos(tT).*(N + N/2 + 1);
tY = sin(tT).*(N + N/2 + 1);
plot(ax, tX, tY, 'LineWidth',.8, 'Color','k')
ax.XLim = [-1,1].*(N + N/2 + 2);
ax.YLim = [-1,1].*(N + N/2 + 2);
tT = (YTick - YLim(1))./diff(YLim).*diff(TLim) + TLim(1);
tX = [cos(tT).*(N + N/2 + 1); cos(tT).*(N + N/2 + 1 + N/50); tT.*nan];
tY = [sin(tT).*(N + N/2 + 1); sin(tT).*(N + N/2 + 1 + N/50); tT.*nan];
plot(ax, tX(:), tY(:), 'LineWidth',.8, 'Color','k')
for i = 1:length(YTick)
    iT = tT(i); iR = iT/pi*180;
    YTickHdl = text(ax, tX(2,i), tY(2,i),...
        num2str(YTick(i)), 'FontName','Times New Roman', 'FontSize',13, 'HorizontalAlignment','center');
    if mod(iR, 360) > 180 && mod(iR, 360) < 360
        YTickHdl.Rotation = iR + 90;
        YTickHdl.VerticalAlignment = 'top';
    else
        YTickHdl.Rotation = iR - 90;
        YTickHdl.VerticalAlignment = 'bottom';
    end
end

Data = cumsum([zeros(N, 1), Data], 2);
% 绘制柱状图
for i = 1:N
    for j = 1:(size(Data, 2) - 1)
        tR = [(N + N/2 + 1 - i - .4).*ones(1, 80), (N + N/2 + 1 - i + .4).*ones(1, 80)];
        tT = (t01.*(Data(i, j + 1) - Data(i, j)) + Data(i, j) - YLim(1))./diff(YLim).*diff(TLim) + TLim(1);
        tX = cos([tT, tT(end:-1:1)]).*tR;
        tY = sin([tT, tT(end:-1:1)]).*tR;
        tHdl = fill(ax, tX, tY, CList(j,:), 'LineWidth',1, 'EdgeColor','k');
        if i == 1
            lgdHdl(j) = tHdl;
        end
    end
end
% 绘制数据名称
for i = 1:N
    text(ax, 0, N + N/2 + 1 - i, [Name1{i},'  '], 'FontName','Times New Roman',...
        'FontSize',16, 'HorizontalAlignment','right');
end
% 绘制图例
legend(lgdHdl, Name2, 'FontName','Times New Roman',...
    'FontSize',16, 'Box','off', 'Location','best',...
    'Position',[.22, .93 - .04*(size(Data, 2) - 1), .1, .04*(size(Data, 2) - 1)]);

更多配色

更多配色可以前往以下fileexchange或者gitee仓库获取:

fileexchange

  • Zhaoxu Liu / slandarer (2024). 2000 palettes (https://www.mathworks.com/matlabcentral/fileexchange/126969-2000-palettes), MATLAB Central File Exchange. Retrieved June 22, 2024.

gitee

  • https://gitee.com/slandarer/slanColor

当然若是懒得去下载,这里也准备了一系列配色数据,复制使用即可:

function CList = colorDemo(N)
% color demos
C{1} = [
    0.8627    0.7608    0.4784
    0.6902    0.7255    0.7451
    0.3882    0.3765    0.3725
    0.5961    0.3686    0.3608
    0.6824    0.7490    0.6588
    0.9451    0.6078    0.2039
];
C{2} = [
    0.1098    0.2000    0.2000
    0.1333    0.3765    0.3765
    0.3882    0.6118    0.6431
    0.8235    0.6784    0.4863
    0.7451    0.4471    0.2706
    0.2745    0.1294    0.1098 
];
C{3} = [
    0.0314    0.0902    0.2275
    0.0039    0.1843    0.3255
    0.0039    0.4275    0.5137
    0.0078    0.6275    0.6353
    0.6745    0.5882    0.4745
    0.9137    0.8706    0.7059
];
C{4} = [
    0.0235    0.5529    0.6157
    0.3961    0.6588    0.6706
    0.5490    0.7412    0.7373
    0.6784    0.7255    0.6314
    0.7373    0.7608    0.6471
    0.8157    0.6863    0.5176
];
C{5} = [
    0.8627    0.6549    0.3804
    0.7765    0.7569    0.4275
    0.5451    0.6118    0.5804
    0.3843    0.5490    0.6471
    0.3529    0.4235    0.4784
    0.3176    0.3098    0.3608
];
C{6} = [
    0.3490    0.3490    0.3608
    0.4510    0.6196    0.6706
    0.1725    0.2118    0.2235
    0.2118    0.3333    0.3686
    0.9765    0.6196    0.5765
    0.7686    0.2392    0.1922
];
C{7} = [
    0.8588    0.7569    0.5922
    0.2157    0.1765    0.1843
    0.3569    0.4863    0.6549
    0.8588    0.6000    0.2588
    0.5529    0.6824    0.5294
    0.5961    0.3529    0.4431
];
C{8} = [
    0.8353    0.6824    0.3882
    0.4314    0.4235    0.5059
    0.9686    0.9255    0.8471
    0.2471    0.2235    0.2235
    0.5765    0.6784    0.5647
    0.7882    0.7176    0.5765
];
C{9} = [
    0.5176    0.4863    0.6392
    0.8941    0.3529    0.3529
    0.9569    0.6510    0.3686
    0.5020    0.4745    0.1686
    0.9490    0.8353    0.4353
    0.1020    0.0706    0.2157
];
C{10} = [
    0.4314    0.4863    0.7255
    0.4824    0.7373    0.8353
    0.8157    0.8863    0.6863
    0.9608    0.8588    0.6000
    0.9098    0.6118    0.5059
    0.8235    0.5176    0.5529
];
C{11} = [
    0.8353    0.4784    0.4275
    0.9098    0.7176    0.3843
    0.6118    0.8039    0.8745
    0.3216    0.3137    0.3216
    0.9020    0.8078    0.6863
    0.7294    0.5843    0.4392
];
C{12} = [
    0.8510    0.3373    0.3608
    0.9490    0.5412    0.5412
    0.9294    0.6627    0.6706
    0.1059    0.7137    0.6863
    0.0314    0.5451    0.7451
    0.0902    0.1569    0.4118
];
CList = C{N};
end




以上已经是完整代码,若懒得复制可去以下gitee仓库获取完整文件夹:

  • https://gitee.com/slandarer/spdraw

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

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

相关文章

OLMo:真正完全开源的大模型

最近&#xff0c;又有一家机构AI2&#xff08;Allen Institute for AI&#xff09;开源了一个LLM&#xff1a;OLMo&#xff0c;它的英文全称就叫Open Language Model。相比之前开源的大模型&#xff0c;OLMo的独特之处是完全开源&#xff0c;除了训练的模型&#xff0c;OLMo还开…

数据结构速成--查找

由于是速成专题&#xff0c;因此内容不会十分全面&#xff0c;只会涵盖考试重点&#xff0c;各学校课程要求不同 &#xff0c;大家可以按照考纲复习&#xff0c;不全面的内容&#xff0c;可以看一下小编主页数据结构初阶的内容&#xff0c;找到对应专题详细学习一下。 目录 …

Unity制作一个简单抽卡系统(简单好抄)

业务流程&#xff1a;点击抽卡——>播放动画——>显示抽卡面板——>将随机结果添加到面板中——>关闭面板 1.准备素材并导入Unity中&#xff08;包含2个抽卡动画&#xff0c;抽卡结果的图片&#xff0c;一个背景图片&#xff0c;一个你的展示图片&#xff09; 2.给…

qt 开发笔记 动态链接库应用

1.概要 1.1 需求 库有两种&#xff0c;动态库和静态库&#xff0c;这里说的是动态库&#xff1b;动态库的加载方式有两种&#xff0c;一直是静态的一种是动态的&#xff0c;这里的静态加载是指静态加载动态&#xff0c;是一种加载动态库的方式。也有一种动态加载的方式&#…

c++ 设计模式 的课本范例(中)

&#xff08;10&#xff09;单例模式 singleton 。整个应用程序执行时&#xff0c;只有一个单例模式的对象。 class GameConfig // 懒汉式&#xff0c;啥时候用单例对象&#xff0c;啥时候创建。 { private:static GameConfig* ptrGameConfig; // 这些函数都作为私有函数&…

多表查询实训

前提 本篇博客&#xff0c;我将通过讲解例题的方式&#xff0c;带大家进一步掌握多表查询的使用规则和使用技巧 正文 前提 先建好表 表1 salgrade (薪资等级表&#xff09; 表2 emp(员工信息表&#xff09; 表3 dept&#xff08;部门信息表&#xff09;&#xff0c;插入相…

图形处理单元(GPU)在现代计算中的应用与挑战(研究论文框架)

摘要:随着高性能计算需求的日益增长,图形处理单元(GPU)已从专业的图形渲染处理器转变为具有高性能并行处理能力的多功能计算平台。本文将探讨GPU的核心优势、编程模型、在不同领域的应用以及面临的挑战和限制。此外,还将讨论GPU技术的未来发展趋势和潜在的研究机会。 关键…

算法-位运算基础

文章目录 前置知识1. 交换两个数2. 比较两个数的大小3. leetcode268 寻找缺失的数字4. leetcode136 只出现一次的数字5. leetcode260 只出现一次的数字|||6. leetcode137 只出现一次的数字||7. 2/3的幂8. 大于等于该数字的最小2的幂9. leetcode201 数字范围按位与10. 位运算中分…

昇思MindSpore学习笔记4--数据集 Dataset

昇思MindSpore学习笔记4--数据集 Dataset 摘要&#xff1a; 昇思MindSpore数据集Dataset的加载、数据集常见操作和自定义数据集方法。 一、数据集 Dataset概念 MindSpore数据引擎基于Pipeline 数据预处理相关模块&#xff1a; 数据集Dataset加载原始数据&#xff0c;支持文本…

C#测试调用DotnetSpider爬取网页内容

微信公众号“DotNet”的文章《.NET快速实现网页数据抓取》介绍了调用开源网页爬取模块DotnetSpider爬取cnblog网站文章的基本方式。之前学习过使用HtmlAgilityPack抓取并分析网页内容&#xff0c;DotnetSpider也依赖HtmlAgilityPack模块&#xff0c;不过前者属于轻量、高效的爬…

基于OrangePi AIpro + owncloud 5分钟搭建一个私有网盘

OrangePi AIpro自带镜像系统已预装了docker&#xff0c;这里我们直接基于docker安装owncloud。 准备 切换用户&#xff1a; HwHiAiUser 默认密码&#xff1a;Mind123 su HwHiAiUser 创建文件夹 sudo mkdir /home/SummerGao/owncloud-docker-server 切换至刚创建的文件夹下…

1,Windows-本地Linux 系统(WSL)

目录 第一步电脑设置 第二步安装Ubuntu 第三文件传递 开发人员可以在 Windows 计算机上同时访问 Windows 和 Linux 的强大功能。 通过适用于 Linux 的 Windows 子系统 (WSL)&#xff0c;开发人员可以安装 Linux 发行版&#xff08;例如 Ubuntu、OpenSUSE、Kali、Debian、Arc…

AI赋能影视解说:Rap说唱玩法拆解!

在影视解说的领域&#xff0c;竞争一直非常激烈&#xff0c;众多创作者纷纷涌入这个热门的赛道。为了在众多声音中脱颖而出&#xff0c;创新成为了关键。最近&#xff0c;一种结合AI技术的解说方式——Rap说唱解说&#xff0c;以其新颖的形式和高效的创作过程&#xff0c;赢得了…

input子系统学习(一)

1、输入子系统框架 2、编写一个简单的设备驱动层代码 #include<linux/module.h> #include<linux/init.h> #include<linux/input.h> #include<linux/time.h>struct input_dev *my_input_dev;static void timer_function(struct timer_list *t); DEFINE…

【android 9】【input】【9.发送按键事件3——Inputchannel的创建过程】

系列文章 本人系列文章-CSDN博客 目录 系列文章 目录 1.简介 1.1 主要步骤 1.2 时序图 2.源码分析 2.1 WindowManagerImpl的addView 2.2 WindowManagerGlobal的addView 2.3 ViewRootImpl 2.4 getWindowSession 2.5 WMS中的openSession 2.6 Session 2.7 class W 2.…

【旭日x3派】部署官方yolov5全流程

地平线旭日x3派部署yolov5--全流程 前言一、深度学习环境安装二、安装docker三、部署3.1、安装工具链镜像3.2、配置天工开物OpenExplorer工具包3.3、创建深度学习虚拟空间&#xff0c;安装依赖&#xff1a;3.4、下载yolov5项目源码并运行3.5、pytorch的pt模型文件转onnx3.6、最…

【接口自动化测试】第三节.实现项目核心业务接口自动化

文章目录 前言一、实现登录接口对象封装和调用 1.0 登录接口的接口测试文档 1.1 接口对象层&#xff08;封装&#xff09; 1.2 测试脚本层&#xff08;调用&#xff09;二、课程新增接口对象封装和调用 2.0 课程新增接口的接口测试文档 2.1 接口对象层…

(单机版)神魔大陆|v0.51.0|冰火荣耀

前言 今天给大家带来一款单机游戏的架设&#xff1a;神魔大陆v0.51.0:冰火荣耀。 如今市面上的资源参差不齐&#xff0c;大部分的都不能运行&#xff0c;本人亲自测试&#xff0c;运行视频如下&#xff1a; (单机版)神魔大陆 下面我将详细的教程交给大家&#xff0c;请耐心阅…

gemini 1.5 flash (node项目)

https://www.npmjs.com/package/google/generative-ai https://ai.google.dev/pricing?hlzh-cn https://aistudio.google.com/app/apikey https://ai.google.dev/gemini-api/docs/models/gemini?hlzh-cn#gemini-1.5-flash https://ai.google.dev/gemini-api/docs/get-started…

【漏洞复现】学分制系统GetTimeTableData SQL注入

0x01 产品简介 学分制系统由上海鹏达计算机系统开发有限公司研发&#xff0c;是基于对职业教育特点和需求的深入理解&#xff0c;结合教育部相关文件精神&#xff0c;并广泛吸纳专家、学者意见而开发的一款综合性管理系统。系统采用模块化的设计方法&#xff0c;方便学校根据自…