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

2024-06-23 07:44

本文主要是介绍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

这篇关于MATLAB | 怎样绘制这样的环形柱状图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1086547

相关文章

不懂怎样摘草莓的电影我

拿起来后摘掉茎的电影 今天的拿起来后摘掉茎的电影,诶,我在某某自选商店,他们上了我的太阳飞机,那些小平房呢,不懂怎样摘草莓的电影我,我开着飞机,哪来的高楼大厦,我找了两个小时,是不是作弊了。 只好求助农民伯伯,都是很简单的,这是冀州市吗,快快充实交代梁锦宇笑着说,拿起来后摘掉茎,我说,咦,许多同学问梁锦宇,后来我才知道。 是东面还是西面,是团队的富民政策把平房变成了高楼大厦,找自己的住处,

时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测

时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测 目录 时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测基本介绍程序设计参考资料 基本介绍 MATLAB实现LSTM时间序列未来多步预测-递归预测。LSTM是一种含有LSTM区块(blocks)或其他的一种类神经网络,文献或其他资料中LSTM区块可能被描述成智能网络单元,因为

以canvas方式绘制粒子背景效果,感觉还可以

这个是看到项目中别人写好的,感觉这种写法效果还可以,就存留记录下 就是这种的背景效果。如果想改背景颜色可以通过canvas.js文件中的fillStyle值改。 附上demo下载地址。 https://download.csdn.net/download/u012138137/11249872

XMG 绘制形状

1. 除非是绘制曲线直接使用原生的。如果绘制形状直接使用UIBezerPath  2. 命名原则,类方法以类名开头 UIBezierPath bezierPathWithRect 3.圆角半径 画圆的大小 以每个顶点为圆心。给定的半径为半径画一个1/4圆。把周边的给切掉 4.只有封闭的形状调用这个方法才有用 [path fill] 5. stroke 描边一下

黑龙江等保测评的具体流程是怎样的

黑龙江等保测评的具体流程 黑龙江等保测评是根据《中华人民共和国网络安全法》及相关法律法规,对信息系统安全保护能力进行评估和验证的过程。以下是黑龙江等保测评的具体流程: 系统定级:根据业务、资产、安全技术、安全管理等方面的情况,对企业的安全防护水平进行评估,编制定级报告,为客户提供技术支持,协助客户编制定级报告,并组织相关专家对定级报告进行评估。 系统备案:持定级报告及登记表到当地的公安网监

MATLAB算法实战应用案例精讲-【数模应用】三因素方差

目录 算法原理 SPSSAU 三因素方差案例 1、背景 2、理论 3、操作 4、SPSSAU输出结果 5、文字分析 6、剖析 疑难解惑 均方平方和类型? 事后多重比较的类型选择说明? 事后多重比较与‘单独进行事后多重比较’结果不一致? 简单效应是指什么? 边际估计均值EMMEANS是什么? 简单简单效应? 关于方差分析时的效应量? SPSSAU-案例 一、案例

鹅算法(GOOSE Algorithm,GOOSE)求解复杂城市地形下无人机避障三维航迹规划,可以修改障碍物及起始点(Matlab代码)

一、鹅算法 鹅优化算法(GOOSE Algorithm,GOOSE)从鹅的休息和觅食行为获得灵感,当鹅听到任何奇怪的声音或动作时,它们会发出响亮的声音来唤醒群中的个体,并保证它们的安全。 参考文献 [1]Hamad R K, Rashid T A. GOOSE algorithm: a powerful optimization tool for real-world engineering

基于NURBS曲线的数据拟合算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1NURBS曲线基础 4.2 数据拟合原理 5.完整程序 1.程序功能描述        基于NURBS曲线的数据拟合算法,非均匀有理B样条(Non-Uniform Rational B-Splines,简称NURBS)曲线是一种强大的数学工具,广泛应用于计算机图形学、CAD/CA

CesiumJS【Basic】- #008 通过canvas绘制billboard

文章目录 通过canvas绘制billboard1 目标2 实现 通过canvas绘制billboard 1 目标 通过canvas绘制billboard 2 实现 /** @Author: alan.lau* @Date: 2024-06-16 11:15:48* @LastEditTime: 2024-06-16 11:43:02* @LastEditors: al

leetcode刷题(38)——142. 环形链表 II

给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。 说明:不允许修改给定的链表。 示例 1: 输入:head = [3,2,0,-4], pos = 1 输出:tail connects to node index 1