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.80780.9255    0.7412    0.58430.6078    0.6941    0.73330.4745    0.6745    0.74120.2039    0.3961    0.45880.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; endif isempty(YTick), YTick = tAx.YTick; endclose(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) < 360YTickHdl.Rotation = iR + 90;YTickHdl.VerticalAlignment = 'top';elseYTickHdl.Rotation = iR - 90;YTickHdl.VerticalAlignment = 'bottom';end
end
% 绘制柱状图
for i = 1:NtR = [(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:Ntext(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.80780.9255    0.7412    0.58430.6078    0.6941    0.73330.4745    0.6745    0.74120.2039    0.3961    0.45880.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; endif isempty(YTick), YTick = tAx.YTick; endclose(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) < 360YTickHdl.Rotation = iR + 90;YTickHdl.VerticalAlignment = 'top';elseYTickHdl.Rotation = iR - 90;YTickHdl.VerticalAlignment = 'bottom';end
endData = cumsum([zeros(N, 1), Data], 2);
% 绘制柱状图
for i = 1:Nfor 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 == 1lgdHdl(j) = tHdl;endend
end
% 绘制数据名称
for i = 1:Ntext(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.47840.6902    0.7255    0.74510.3882    0.3765    0.37250.5961    0.3686    0.36080.6824    0.7490    0.65880.9451    0.6078    0.2039
];
C{2} = [0.1098    0.2000    0.20000.1333    0.3765    0.37650.3882    0.6118    0.64310.8235    0.6784    0.48630.7451    0.4471    0.27060.2745    0.1294    0.1098 
];
C{3} = [0.0314    0.0902    0.22750.0039    0.1843    0.32550.0039    0.4275    0.51370.0078    0.6275    0.63530.6745    0.5882    0.47450.9137    0.8706    0.7059
];
C{4} = [0.0235    0.5529    0.61570.3961    0.6588    0.67060.5490    0.7412    0.73730.6784    0.7255    0.63140.7373    0.7608    0.64710.8157    0.6863    0.5176
];
C{5} = [0.8627    0.6549    0.38040.7765    0.7569    0.42750.5451    0.6118    0.58040.3843    0.5490    0.64710.3529    0.4235    0.47840.3176    0.3098    0.3608
];
C{6} = [0.3490    0.3490    0.36080.4510    0.6196    0.67060.1725    0.2118    0.22350.2118    0.3333    0.36860.9765    0.6196    0.57650.7686    0.2392    0.1922
];
C{7} = [0.8588    0.7569    0.59220.2157    0.1765    0.18430.3569    0.4863    0.65490.8588    0.6000    0.25880.5529    0.6824    0.52940.5961    0.3529    0.4431
];
C{8} = [0.8353    0.6824    0.38820.4314    0.4235    0.50590.9686    0.9255    0.84710.2471    0.2235    0.22350.5765    0.6784    0.56470.7882    0.7176    0.5765
];
C{9} = [0.5176    0.4863    0.63920.8941    0.3529    0.35290.9569    0.6510    0.36860.5020    0.4745    0.16860.9490    0.8353    0.43530.1020    0.0706    0.2157
];
C{10} = [0.4314    0.4863    0.72550.4824    0.7373    0.83530.8157    0.8863    0.68630.9608    0.8588    0.60000.9098    0.6118    0.50590.8235    0.5176    0.5529
];
C{11} = [0.8353    0.4784    0.42750.9098    0.7176    0.38430.6118    0.8039    0.87450.3216    0.3137    0.32160.9020    0.8078    0.68630.7294    0.5843    0.4392
];
C{12} = [0.8510    0.3373    0.36080.9490    0.5412    0.54120.9294    0.6627    0.67060.1059    0.7137    0.68630.0314    0.5451    0.74510.0902    0.1569    0.4118
];
CList = C{N};
end




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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PID理解

一、背景 pid理解 前几天看了bilibili的视频&#xff0c;链接&#xff1a;更好的理解PID【通过推小车的过程】&#xff0c;那个人使用matlab调整pid&#xff0c;另外使用推小车这个假设来解释pid。我其实当时也只是听懂一些&#xff0c;然后后面自己又琢磨。感觉是理解了。这…

python--fasApi学习(Dash+FastAPI框架)

在学习fastApi 框架时&#xff0c;发现了一个好用的框架&#xff0c;参考&#xff1a; 博客参考&#xff1a; https://blog.csdn.net/gitblog_00002/article/details/137331157下载文档并部署&#xff1a; 下载代码&#xff1a; git clone https://gitee.com/insistence2022/…

星戈瑞Sulfo-CY7 NHS Ester结构与荧光性质

【星戈瑞stargraydye】以下数据均来自文献资料,星戈瑞暂未进行独立验证, 仅供参考&#xff01; Sulfo-Cy7 NHS Ester是一种应用于生物医学领域的荧光染料&#xff0c;其结构特性和荧光性质使其在荧光标记、组织成像和药物追踪等方面发挥着作用。 Sulfo-Cy7 NHS Ester的结构特性…

python接口自动化测试数据和代码分离解析

common中存放的是整个项目中公共使用的封装方法 从工程目录上可以看到区分 datas中专门存放测试数据(yml文件) cases中专门集中存放测试用例 ... 数据分离的第一步先找到工程项目路径 1 2 3 4 5 6 7 8 9 10 11 12 # -*- encoding: utf-8 -*- """ __Software…

6月28日PolarDB开源社区长沙站,NineData联合创始人周振兴将带来《数据库DevOps最佳实践》主题分享

6月28日&#xff08;周五&#xff09;&#xff0c;PolarDB 开源社区将来到湖南长沙&#xff0c;与湖南的开发者朋友们一起进行数据库技术交流&#xff01;NineData 联合创始人周振兴受邀参加&#xff0c;并将带来《数据库 DevOps 最佳实践》的主题分享。 本次活动议程&#xff…

GEE问题——EEException:未注册 Earth Engine 或项目未注册。

问题 EEException:未注册 Earth Engine 或项目未注册。 EEException: Not signed up for Earth Engine or project is not registered. 解决方案 在谷歌社区里面这个问题已经被记录了: [Notice] Removing access for unregistered Cloud projects on 2024-06-17 查看下…

SpringBoot集成IotDB

1、引入依赖 <dependency><groupId>org.apache.iotdb</groupId><artifactId>iotdb-session</artifactId><version>0.14.0-preview1</version></dependency><dependency><groupId>cn.hutool</groupId><a…

JAVA小知识29:IO流(上)

IO流是指在计算机中进行输入和输出操作的一种方式&#xff0c;用于读取和写入数据。IO流主要用于处理数据传输&#xff0c;可以将数据从一个地方传送到另一个地方&#xff0c;例如从内存到硬盘&#xff0c;从网络到内存等。IO流在编程中非常常见&#xff0c;特别是在文件操作和…

第4章 客户端-Java客户端Jedis

1.获取Jedis maven配置加入项目中 <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.8.2</version> </dependency>2.Jedis的基本使用 Jedis的使用方法非常简单&#xff0c;只要下面三…

首次30米空间分辨率生成中国年度耕地栅格数据1986-2021

中国1986-2021年30米分辨率年度耕地数据集 数据介绍 精确、详细且及时的耕地范围信息对于粮食安全保障和环境可持续性至关重要。然而&#xff0c;由于农业景观的复杂性和足够训练样本的缺乏&#xff0c;在大范围下进行高时空分辨率的耕地动态监测仍然具有挑战性&#xff0c;尤其…

洞察用户需求,Xinstall数据统计App让你的App运营如虎添翼

在互联网时代&#xff0c;App推广和运营面临着前所未有的挑战。流量红利逐渐衰退&#xff0c;用户获取成本不断攀升&#xff0c;如何确保在多变的互联网环境下&#xff0c;迅速搭建起能时刻满足用户需求的运营体系&#xff0c;成为众多企业急待解决的问题。今天&#xff0c;我们…

docker部署FastDFS整合Springboot

文章目录 1、FastDFS是什么&#xff1f;2、搭建docker环境3、部署fastdfs4、整合springboot5、接口测试参考文章 1、FastDFS是什么&#xff1f; FastDFS是一个开源的轻量级分布式文件系统&#xff0c;它对文件进行管理&#xff0c;功能包括&#xff1a;文件存储、文件同步、文…

聚星文社官网

推文工具可以帮助你将小说内容简洁明了地转化为推文形式&#xff0c;以便更好地在社交媒体上进行宣传和推广。以下是一些建议的小说推文工具&#xff1a; 聚星文社 字数统计工具&#xff1a;使用字数统计工具&#xff0c;如Microsoft Word或在线字数统计器&#xff0c;来确保你…

[JS]对象

介绍 对象是一种无序的数据集合, 可以详细的描述某个事物 事物的特征在对象中用属性来表示, 事物的行为在对象中用方法来表示 使用 创建对象 let 对象名 {属性名&#xff1a;值&#xff0c;方法名&#xff1a;函数&#xff0c; } let 对象名 new Object(); 对象名.属性…

工业网关的功能与作用解析-天拓四方

在工业4.0和智能制造的时代背景下&#xff0c;工业网关作为连接现场设备与云端平台的桥梁&#xff0c;正发挥着日益重要的作用。它不仅为工业设备的远程监控和管理提供了可能&#xff0c;还为企业实现数字化转型和智能化升级提供了有力支持。本文将对工业网关的功能与作用进行解…

Python:基于TSFEL库对时间序列进行特征分析

1. TSFEL 时间序列作为主要TSFEL提取方法的输入传递&#xff0c;要么作为先前加载在内存中的数组传递&#xff0c;要么存储在数据集中的文件中。 由于TSFEL可以处理多维时间序列&#xff0c;因此随后应用了一套预处理方法&#xff0c;以确保信号质量足够和时间序列同步&#xf…

AI音乐大模型:深度剖析创意与产业的双重变革

随着AI技术的飞速发展&#xff0c;音乐大模型在最近一个月内纷纷上线&#xff0c;这一变革性技术不仅颠覆了传统的音乐创作方式&#xff0c;更是对整个音乐产业及创意产业带来了深远的影响。本文将从多个维度出发&#xff0c;深度剖析AI音乐大模型对创意与产业的双重变革。 一、…

ONLYOFFICE 8.1:引领桌面办公新潮流,功能升级全面提升

目录 一、ONLYOFFICE是什么&#xff1f; 二、功能完善的PDF编辑器 三、幻灯片版式升级 四、改进从右至左显示 五、新的本地化选项 六、多媒体功能增强 七、应用价值探讨 一、ONLYOFFICE是什么&#xff1f; ONLYOFFICE 是一款功能强大的办公套件&#xff0c;旨在提供全面…

acme.sh泛证书申请

说明: 1、想每个项目都接入域名+端口访问,所以通过acme.sh申请泛域名证书 2、阿里云域名解析,并且指定公网ip地址对应的公共Nginx服务 3、acme.sh证书只有3个月,所以要用shell自动续签证书 4、阿里云域名已解析,所以二级域名、三级域名能正常解析,如下图所示, 一、阿里云…

charles破解

一、Charles官网下载安装包二、安装charles三、charles破解 一、Charles官网下载安装包 根据自己电脑系统 官网下载即可。 链接: https://www.charlesproxy.com/download/latest-release/ 二、安装charles 点击下载的安装包&#xff0c;然后进行安装。 三、charles破解 打…