基于matlab实现气泡饼图

简介: 基于matlab实现气泡饼图

 ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab完整代码及仿真定制内容点击👇

智能优化算法       神经网络预测       雷达通信      无线传感器        电力系统

信号处理              图像处理               路径规划       元胞自动机        无人机

🔥 内容介绍

气泡饼图是数据可视化中一种独特而有趣的图表类型。它将饼图和散点图的特点结合在一起,通过展示数据的比例和分布情况,使得观察者能够更直观地理解数据背后的含义。在本文中,我们将深入探讨气泡饼图的特点、应用场景以及如何创建和解读这种图表。

首先,让我们来了解一下气泡饼图的基本构成。与传统的饼图相比,气泡饼图在每个扇形区域内添加了一个气泡,气泡的大小代表了该区域所占比例的大小。这种设计使得气泡饼图能够同时展示数据的相对比例和绝对数值,提供了更全面的信息。

气泡饼图的应用场景非常广泛。首先,它常用于展示不同类别或组织之间的比例关系。例如,在市场调研中,我们可以使用气泡饼图来展示各个品牌的市场份额,气泡的大小代表了各个品牌的销售额。这样一来,我们可以直观地看到不同品牌之间的相对比例以及整个市场的规模。

此外,气泡饼图还可以用于展示多维数据之间的关系。例如,在人口统计学中,我们可以使用气泡饼图来展示不同年龄段的人口比例,气泡的大小可以表示该年龄段的人口数量。这样一来,我们可以通过观察气泡饼图,快速了解不同年龄段的人口分布情况。

在创建气泡饼图时,我们需要注意一些关键的步骤。首先,我们需要确定要展示的数据集,并将其按照比例转换为角度。然后,我们需要计算每个扇形区域的起始角度和结束角度。接下来,我们可以根据数据的绝对数值确定每个扇形区域内气泡的大小。最后,我们可以使用数据可视化工具或编程语言来创建气泡饼图,并添加必要的标签和图例,使得图表更易于理解和解读。

解读气泡饼图时,我们需要注意一些关键的要点。首先,我们应该关注气泡的大小,以了解不同区域所占比例的大小。其次,我们可以比较不同区域之间的气泡大小,以了解它们之间的相对比例。此外,我们还可以观察气泡的位置和分布情况,以获取更多关于数据的洞察。

总结一下,气泡饼图是一种独特而有趣的数据可视化工具,它能够同时展示数据的比例和分布情况。通过使用气泡饼图,我们可以更直观地理解数据背后的含义,并从中获取有价值的洞察。在今天数据驱动的世界中,气泡饼图无疑是一种强大的工具,帮助我们更好地理解和传达数据。无论是市场调研、人口统计学还是其他领域,气泡饼图都将成为我们分析和展示数据的重要利器。

📣 部分代码

BubbleChart ExamplesA BubblePie chart visualizing the revenue of an imaginary store that sells pizza ingredients.XData = 2015:2017;YData = [50 80 65];PieData = [12,26,12; 40,15,25; 10,10,45];b = bubblePieChart(XData, YData, PieData);b.LineStyle = 'none';b.Labels = {'Basil','Tomatoes','Cheese'};colororder([.47 .67 .19; .85 .33 .1; 1 1 .1]);xlabel("Year")ylabel("Revenue (thousands)")title("Pizza Ingredient Sales")A BubblePie chart plotting 25 pies with random data and sizes.XData = 10 * rand(1,25);YData = 10 * rand(1,25);PieData = rand(25,5);SizeData = 40 * rand(1,25) + 20;b = bubblePieChart(XData, YData, PieData, SizeData);colororder(cool(5));b.LegendVisible = 'off';
classdef bubblePieChart < matlab.graphics.chartcontainer.ChartContainer & ...        matlab.graphics.chartcontainer.mixin.Legend    % bubblePieChart Creates a bubble pie chart.    %   bubblePieChart(x,y,p) create a bubble pie chart with the specified    %   pie locations and data. The sizes of the pies are determined    %   automatically based on the pie data.    %    %   bubblePieChart(x,y,p,s) create a bubble pie chart with    %   the specified size for each pie in points, where one point equals    %   1/72 of an inch. s can be a scalar or a vector the same length as x    %   and y. If s is a scalar, the same size is used for all pies.    %    %   bubblePieChart() create a bubble pie chart using only name-value    %   pairs.    %    %   bubblePieChart(___,Name,Value) specifies additional options for    %   the bubble pie chart using one or more name-value pair arguments.    %   Specify the options after all other input arguments.    %    %   bubblePieChart(parent,___) creates the bubble pie chart in the    %   specified parent.    %    %   b = bubblePieChart(___) returns the bubblePieChart object. Use b    %   to modify properties of the plot after creating it.        % Copyright 2020-2021 The MathWorks, Inc.    properties        % x-axis locations of the pies        XData (1,:) = []                % y-axis locations of the pies        YData (1,:) = []                % Pie data, specified as a matrix, where each row corresponds to        % the data for one pie        PieData {mustBeNumeric} = []                % Pie sizes, diameters in points (1/72 inch)        SizeData (1,:) {mustBeNumeric} = 50                % Line style to use for drawing pies        LineStyle {mustBeMember(LineStyle,{'-', '--',':','-.','none'})} = '-'                % Names of the pie categories        Labels (:,1) categorical = categorical.empty(0,1)                % Title of the plot        Title (:,1) string = ""                % Subtitle of the plot        Subtitle (:,1) string = ""                % x-label of the plot        XLabel (:,1) string = ""                % y-label of the plot        YLabel (:,1) string = ""                % Mode for the x-limits.        % Note that it is not a dependent property since auto limits are        % set by the chart and not the axes        XLimitsMode (1,:) char {mustBeAutoManual} = 'auto'                % Mode for the y-limits.        YLimitsMode (1,:) char {mustBeAutoManual} = 'auto'    end    properties (Access = protected)        % Used for saving to .fig files        ChartState = []    end    properties(Access = private,Transient,NonCopyable)        % Array of parent transforms for the pies        PieChartArray (1,:) matlab.graphics.primitive.Transform                % Boolean specifying if PieData was changed since the previous call        % to update. If true, all pies need to be redrawn.        PieDataChanged logical = true    end        properties (Dependent)        % List of colors to use for pie categories        ColorOrder {validatecolor(ColorOrder, 'multiple')} = get(groot, 'factoryAxesColorOrder')                % x-limits of the plot        XLimits (1,2) double {mustBeLimits} = [0 1]                % y-limits of the plot        YLimits (1,2) double {mustBeLimits} = [0 1]    end    methods        function obj = bubblePieChart(varargin)            % Initialize list of arguments            args = varargin;            leadingArgs = cell(0);            % Check if the first input argument is a graphics object to use as parent.            if ~isempty(args) && isa(args{1},'matlab.graphics.Graphics')                % bubblePieChart(parent, ___)                leadingArgs = args(1);                args = args(2:end);            end            % Check for optional positional arguments.            if ~isempty(args) && numel(args) >= 3 && isnumeric(args{1}) ...                    && isnumeric(args{2}) && isnumeric(args{3})                if mod(numel(args),2) == 1                    % bubblePieChart(x,y,p)                    % bubblePieChart(x,y,p,Name,Value)                    x = args{1};                    y = args{2};                    p = args{3};                                        % set size automatically. The largest pie has size 50                    % and the others are scaled relative to it                    totals = sum(p,2);                    ratios = totals/max(totals);                    s = 50*ratios;                    leadingArgs = [leadingArgs {'XData', x, 'YData', y, 'PieData', p, 'SizeData', s}];                    args = args(4:end);                elseif mod(numel(args),1) == 0                    % bubblePieChart(x,y,p,s)                    % bubblePieChart(x,y,p,s,Name,Value)                    x = args{1};                    y = args{2};                    p = args{3};                    s = args{4};                    leadingArgs = [leadingArgs {'XData', x, 'YData', y, 'PieData', p, 'SizeData', s}];                    args = args(5:end);                else                    error('bubblePieChart:InvalidSyntax', ...                        'Specify x locations, y locations, pie data, and optionally size data.');                end            end                        % Combine positional arguments with name/value pairs.            args = [leadingArgs args];            % Call superclass constructor method            obj@matlab.graphics.chartcontainer.ChartContainer(args{:});        end    end    methods(Access = protected)        function setup(obj)            % Create the axes            ax = getAxes(obj);            ax.Units = 'points';                        % make limit mode manual so that we can control the limits            ax.XLimMode = 'manual';            ax.YLimMode = 'manual';                        % Set axes interactions            ax.Interactions = [                panInteraction;                zoomInteraction;                rulerPanInteraction];                        % Set restoreview button callback            btn = axtoolbarbtn(axtoolbar(ax), 'icon', 'restoreview');            btn.ButtonPushedFcn  = @(~,~) update(obj);                        % Call the load method in case of loading from a fig file            loadstate(obj);        end        function update(obj)            ax = getAxes(obj);                        % Verify that the data properties are consistent with one            % another.            showChart = verifyDataProperties(obj);            set(obj.PieChartArray,'Visible', showChart);                        % Abort early if not visible due to invalid data.            if ~showChart                return            end                        % If pie data is changed, delete and recreate all pies            if obj.PieDataChanged                delete(obj.PieChartArray);                hold(ax,'on');                   for r = 1:size(obj.PieData,1)                       % Create new Transform                       t = hgtransform('Parent',ax);                       obj.PieChartArray(r) = t;                                              % Create new pie with transform as parent                       x = obj.PieData(r,:);                       myPie(t,x);                   end                hold(ax,'off')                                obj.PieDataChanged = false;            end                        % Set only the first pie chart to show in the legend            obj.PieChartArray(1).Annotation.LegendInformation.IconDisplayStyle = 'children';                        % Update legend labels            if ~isempty(obj.Labels)                lgd = getLegend(obj);                lgd.String = obj.Labels;            end                        % Set Colormap based on ColorOrder            ax.Colormap = obj.ColorOrder(mod(0:size(obj.PieData,2)-1,size(obj.ColorOrder,1))+1,:);                       % Automatically set axes limits            if strcmp(obj.XLimitsMode,'auto')                   obj.setAutoXLimits();            end                        if strcmp(obj.YLimitsMode,'auto')                obj.setAutoYLimits();            end                        % Set position, scale, and style of each pie            for i = 1:length(obj.PieChartArray)               % move and scale pies               txy = makehgtform('translate', ...                   [obj.XData(i), obj.YData(i), 0]);                              % Determine scale to use               % divide by 2 since SizeData corresponds to diameter, and               % default pies have radius of 1               if isscalar(obj.SizeData)                   scale = obj.SizeData/2;               else                   scale = obj.SizeData(i)/2;               end                              % Convert scale from axis units to data units               sx = (ax.XLim(2) - ax.XLim(1))*scale/ax.Position(3);               sy = (ax.YLim(2) - ax.YLim(1))*scale/ax.Position(4);                              sxy = makehgtform('scale',[sx, sy, 1]);                              obj.PieChartArray(i).Matrix = txy * sxy;                              patches = findall(obj.PieChartArray(i), 'Type', 'Patch');               set(patches,'LineStyle',obj.LineStyle);            end                        % Set title            title(ax, obj.Title, obj.Subtitle);                        % Set axis labels            xlabel(ax, obj.XLabel);            ylabel(ax, obj.YLabel);        end                function showChart = verifyDataProperties(obj)            % x and y must be the same length.            showChart = numel(obj.XData) == numel(obj.YData);            if ~showChart                warning('bubblePieChart:DataLengthMismatch',...                    'XData and YData must be the same legnth');                return            end                        % PieData must have the same number of rows as the length of x            showChart = size(obj.PieData,1) == numel(obj.XData);             if ~showChart                warning('bubblePieChart:DataLengthMismatch',...                    'PieData must have the same number of rows as XData.');                return            end                        % SizeData must be a scalar or be the same length as x            showChart = isscalar(obj.SizeData) || numel(obj.SizeData) == numel(obj.XData);            if ~showChart                warning('bubblePieChart:DataLengthMismatch',...                    'SizeData must be a scalar or have the same number of rows as XData.');                return            end        end    end    methods        function data = get.ChartState(obj)            % This method gets called when a .fig file is saved            isLoadedStateAvailable = ~isempty(obj.ChartState);            if isLoadedStateAvailable                data = obj.ChartState;            else                data = struct;                ax = getAxes(obj);                % Get axis limits only if mode is manual.                if strcmp(ax.XLimMode,'manual')                    data.XLim = ax.XLim;                end                if strcmp(ax.YLimMode,'manual')                    data.YLim = ax.YLim;                end            end        end        function loadstate(obj)            % Call this method from setup to handle loading of .fig files            data=obj.ChartState;            ax = getAxes(obj);            % Look for states that changed            if isfield(data, 'XLim')                ax.XLim=data.XLim;            end            if isfield(data, 'YLim')                ax.YLim=data.YLim;            end        end                function set.PieData(obj,val)            obj.PieData = val;            obj.PieDataChanged = true;        end                function updateNow(obj)            update(obj);        end                function set.ColorOrder(obj, map)            ax = getAxes(obj);            ax.ColorOrder = validatecolor(map, 'multiple');        end                function map = get.ColorOrder(obj)            ax = getAxes(obj);            map = ax.ColorOrder;        end                % xlim method        function varargout = xlim(obj,varargin)            ax = getAxes(obj);            [varargout{1:nargout}] = xlim(ax,varargin{:});        end        % ylim method        function varargout = ylim(obj,varargin)            ax = getAxes(obj);            [varargout{1:nargout}] = ylim(ax,varargin{:});        end                % set and get methods for XLimits        function set.XLimits(obj,xlm)            ax = getAxes(obj);            ax.XLim = xlm;        end        function xlm = get.XLimits(obj)            ax = getAxes(obj);            xlm = ax.XLim;        end        % set and get methods for YLimits        function set.YLimits(obj,ylm)            ax = getAxes(obj);            ax.YLim = ylm;        end        function ylm = get.YLimits(obj)            ax = getAxes(obj);            ylm = ax.YLim;        end    end        methods(Access=private)                % Helper function for auotmatically setting x-limits        function setAutoXLimits(obj)              ax = getAxes(obj);                        minX = min(obj.XData);            maxX = max(obj.XData);                        if(minX==maxX)                minX = minX-1;                maxX = maxX+1;            end                            maxRadius = min(max(obj.SizeData)/2, ax.Position(3)/3);                        A = [-maxRadius+ax.Position(3) maxRadius;                 maxRadius ax.Position(3)-maxRadius];            b = [minX*ax.Position(3); maxX*ax.Position(3)];            xlimits = A\b;            obj.XLimits = xlimits;            end                % Helper function for auotmatically setting y-limits        function setAutoYLimits(obj)              ax = getAxes(obj);                        minY = min(obj.YData);            maxY = max(obj.YData);                        if(minY==maxY)                minY = minY-1;                maxY = maxY+1;            end                        maxRadius = min(max(obj.SizeData)/2, ax.Position(4)/3);                        A = [-maxRadius+ax.Position(4) maxRadius;                 maxRadius ax.Position(4)-maxRadius];            b = [minY*ax.Position(4); maxY*ax.Position(4)];            ylimits = A\b;            obj.YLimits = ylimits;        end    endendfunction mustBeLimits(a)    if numel(a) ~= 2 || a(2) <= a(1)         throwAsCaller(MException('densityScatterChart:InvalidLimits', 'Specify limits as two increasing values.'))    endendfunction mustBeAutoManual(mode)    mustBeMember(mode, {'auto','manual'})end% Helper function for creating pies baesd on MATLAB's pie functionfunction h = myPie(ax,x)    % Normalize input data    x = x/sum(x);    h = [];    theta0 = pi/2;    maxpts = 100;    for i=1:length(x)        n = max(1,ceil(maxpts*x(i)));        r = [0;ones(n+1,1);0];        theta = theta0 + [0;x(i)*(0:n)'/n;0]*2*pi;        [xx,yy] = pol2cart(theta,r);        theta0 = max(theta);        h = [h,...            patch('XData',xx,'YData',yy,'CData',i*ones(size(xx)), ...                'FaceColor','Flat','parent',ax)]; %#ok<AGROW>    endend

⛳️ 运行结果

image.gif编辑

🔗 参考文献

[1] 张蕾.基于神经网络的地区配变重过载预测研究[J].陕西理工大学, 2019.

[2] 俞建荣,卜凡亮,曹建树,等.基于Matlab的流化床气泡运动的图像识别与处理[J].仪器仪表学报, 2006(z3):2.DOI:10.3321/j.issn:0254-3087.2006.z3.215.

[3] 王寻,王宏哲,张泽坤,等.基于Matlab GUI的气泡动力学仿真系统设计[J].实验室研究与探索, 2022(004):041.

🎈 部分理论引用网络文献,若有侵权联系博主删除

🎁  关注我领取海量matlab电子书和数学建模资料

👇  私信完整代码和数据获取及论文数模仿真定制

1 各类智能优化算法改进及应用

生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化

2 机器学习和深度学习方面

卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断

2.图像处理方面

图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知

3 路径规划方面

旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化

4 无人机应用方面

无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配、无人机安全通信轨迹在线优化

5 无线传感器定位及布局方面

传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化

6 信号处理方面

信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化

7 电力系统方面

微电网优化、无功优化、配电网重构、储能配置

8 元胞自动机方面

交通流 人群疏散 病毒扩散 晶体生长

9 雷达方面

卡尔曼滤波跟踪、航迹关联、航迹融合


相关文章
|
机器学习/深度学习 传感器 算法
【免费】基于matlab绘制三维柱形图
【免费】基于matlab绘制三维柱形图
|
7月前
Matlab绘制图形
Matlab绘制图形
58 0
|
7月前
|
编解码
MATLAB | 科研绘图第十三期表示散点分布的双柱状统计图
MATLAB | 科研绘图第十三期表示散点分布的双柱状统计图
42 0
|
7月前
MATLAB实战 | 科赫曲线的绘制
MATLAB实战 | 科赫曲线的绘制
431 0
MATLAB实战 | 科赫曲线的绘制
|
4月前
【科研技巧】Matlab 绘制论文所需格式图实现(柱状图、折线、散点图)
【8月更文挑战第5天】Matlab绘制不同类型的图表(包括折线图、柱状图和散点图)的代码示例,以及如何调整图表的字体大小、坐标轴描述、图例和网格线等属性,以满足论文所需的格式要求。
137 10
|
7月前
|
编解码
MATLAB | SCI绘图配色第三期 | 二维柱状图 | 一人之下
MATLAB | SCI绘图配色第三期 | 二维柱状图 | 一人之下
122 0
|
7月前
|
编解码
MATLAB | SCI 绘图配色第六期 | 三维折线图
MATLAB | SCI 绘图配色第六期 | 三维折线图
194 0
|
7月前
Matlab绘制圆柱侧面
Matlab绘制圆柱侧面
67 0
|
机器学习/深度学习 传感器 数据可视化
基于matlab生成带有误差线的条形图
基于matlab生成带有误差线的条形图
|
机器学习/深度学习 传感器 安全
基于Matlab绘制剪切力和弯曲矩图
基于Matlab绘制剪切力和弯曲矩图