MATLAB–pie函數繪制復雜分類數據的餅狀圖
目錄
- MATLAB--pie函數繪制復雜分類數據的餅狀圖
- 摘要
- 1. 問題描述
- 2. 具體步驟:
- 3. 繪制結果
- 4. 小結
摘要
在數據可視化中,餅狀圖是一種常用的展示分類數據的方式。之前,文章介紹了使用MATLAB繪制餅狀圖的入門方法,現在博主要填上之前這篇文章里提到的坑啦!!本文將介紹如何使用MATLAB的pie函數繪制復雜分類數據的餅狀圖。我們首先生成需要使用的復雜數據,然后詳細說明了使用pie函數繪制餅狀圖的具體步驟,包括易錯點和重點內容。
1. 問題描述
為了方便給大家演示,我們從0到1,從數據類型和大家開始說明。這里將使用MATLAB生成描述6家上市投資公司在8種投資類別上的復雜數據,然后按照投資類別進行分類,并計算各公司對各類別企業的投資比例,最后繪制餅狀圖展示結果。
數據類型:5家上市投資公司,投資若干家類別企業(共8種類別),對各企業的投資額也不同,數據內容包括:投資公司、被投資的企業、各企業行業類別、各公司對各企業的投資額。
接下來,需要將該投資額數據按照8種投資類別進行分類,5個公司對8個類別企業的投資比例以投資額作為計算依據,每家公司每種類別占比均不相同。
最后,繪制均勻分布的餅狀圖,每張餅圖中按照 “類別(比例)” 的格式 標注各類別及比例數據,由于legend相同,所以整個figure使用一個legend;同時調整字體和figure圖幅大小,使所有字都清楚展示出來。
2. 具體步驟:
- 投資數據生成: 先生成描述5家上市投資公司在8種投資類別上的復雜數據,包括投資公司、被投資的企業、各企業行業類別以及各公司對各企業的投資額。
% 生成復雜分類數據
investment_data = struct();% 六家上市投資公司名稱
company_names = {'A Corp', 'B Corp', 'C Corp', 'D Corp', 'E Corp'};
investment_data.Company = company_names;% 8種投資類別
category_names = {'Technology', 'Finance', 'Healthcare', 'Real Estate', 'Manufacturing', 'Energy', 'Retail', 'Transportation'};% 為每家公司隨機生成對每種類別企業的投資額
for i = 1:numel(company_names)for j = 1:numel(category_names)investment_data.(['Investment_', num2str(j)])(i) = {randi([10000, 500000])}; % 隨機生成投資額end
end
重點 :數據采用
結構數組
investment_data
保存更方便直觀哦;分類數據使用元胞cell
數據類型。
- 數據分類處理: 將按照8種投資類別對數據進行分類,并計算各公司對各類別企業的投資比例。
% 按照投資類別分類并計算投資比例
category_investments = zeros(numel(category_names), numel(company_names));
for i = 1:numel(category_names)for j = 1:numel(company_names)category_investments(i, j) = cell2mat(investment_data.(['Investment_', num2str(i)])(j));end
end% 計算投資比例
total_investments = sum(category_investments, 1);
investment_proportions = category_investments ./ total_investments;
- 繪制餅狀圖: 最后,使用MATLAB的pie函數繪制餅狀圖,確保餅圖分布均勻,并標注各類別及比例數據。
ref:(代碼中部分方法和原理參見博主另一篇文章:如何合理布局子圖–確定MATLAB的subplot子圖位置參數)
% 繪制餅狀圖 采用subplot繪制子圖,將5家公司的數據繪制在一張figure上
% 給定子圖布局參數 (具體方法和原理參見博主另一篇文章:https://blog.csdn.net/weixin_43323302/article/details/136383424)
N = 2; % 子圖行數
M = 3; % 子圖列數
subplot_length = 3; % 子圖高度 (比例2:3,3:4,9:16 等)
subplot_width = 4; % 子圖寬度
top_margin = 0.4; % 上邊界間距
bottom_margin = 0.6; % 下邊界間距
left_margin = 0.6; % 左邊界間距
right_margin = 0.4; % 右邊界間距
gap = 0.8; % 子圖間隙
% 采用 subplot_params 函數確定子圖布局參數(要求繪圖工整且格式統一的小伙伴可以采用)(具體方法和原理參見博主另一篇文章:https://blog.csdn.net/weixin_43323302/article/details/136383424)
[subplot_position,figure_width,figure_length]=subplot_params(N,M,subplot_length,subplot_width,top_margin,bottom_margin,left_margin,right_margin,gap);f1=figure('Units', 'inches','Position', [0, 0, figure_width, figure_length]); % 一定要說明單位
set(f1,'name','日均啟停次數');
fontsize=9;
labelmultiplier=1.3;
titlemultiplier=1.4;
pos=subplot_position;legend_labels = {}; % 存儲legend標簽for i = 1:numel(company_names)labels_text = {}; % 存儲label標簽% 合并標簽和比例數據for k = 1:numel(category_names)label_text = [category_names{k}, ' (', num2str(100*investment_proportions(k, i), '%.1f%%'), ')'];labels_text = [labels_text, label_text]; % 添加到label標簽中endsubplot('Position',pos(i,:));h = pie(investment_proportions(:, i), labels_text);title(company_names{i}); % 添加標題set(gca,'FontSize',fontsize,'LabelFontSizeMultiplier',labelmultiplier,'TitleFontSizeMultiplier',titlemultiplier);end
legend(category_names, 'Location', 'bestoutside','FontSize',fontsize); % 設置legend位置
易錯點: 在使用pie函數時,需要將比例數據格式化為字符串,并確保格式清晰可讀。
重點內容: 使用MATLAB的字符串格式化功能,將比例數據添加到各類別的標簽上。
3. 繪制結果
各家公司、各個投資類別的信息及占比,一目了然。第六個位置剛好放legend啦!
4. 小結
通過以上步驟,使用MATLAB的pie函數繪制了復雜分類數據的餅狀圖,并調整了圖形樣式以確保數據結果分類的準確度和可視化。希望博主這篇文章能夠幫助你更好地利用MATLAB進行數據可視化哦。