Matlab實(shí)現(xiàn)極坐標(biāo)堆疊柱狀圖的繪制
極坐標(biāo)堆疊圖也是風(fēng)玫瑰圖的常用形式,MATLAB的bar
繪制的條形圖可以繪制成堆疊形式,但是并沒有一個自帶函數(shù)可以繪制極坐標(biāo)堆疊圖,而且極坐標(biāo)下fill
函數(shù)也不能用,于是就考慮將數(shù)據(jù)進(jìn)行累加,并多次調(diào)用polarhistogram
函數(shù)進(jìn)行繪圖,我將這個過程變?yōu)榱艘粋€方便調(diào)用的類。
以下先說明這個類該咋用,之后再給出類的完整代碼:
part1: 函數(shù)介紹
基本使用
h的每一行代表要繪制一層柱狀圖的數(shù)據(jù),這里要繪制三層的堆疊柱狀圖:
h1=randi([8,18],[1,35])+rand([1,35]); h2=randi([2,8],[1,35])+rand([1,35]); h3=randi([0,3],[1,35])+rand([1,35]); h=[h1;h2;h3]; wr=windrose(h);% 構(gòu)造堆疊圖類 wr=wr.draw(); % 繪圖
其中wr=windrose(h)
是構(gòu)造類的過程,第一個輸入可以是高度矩陣,也可以是當(dāng)前的極坐標(biāo)區(qū)域,繪制的角度范圍可以省略。
角度范圍
構(gòu)造函數(shù)的角度范圍可以省略,默認(rèn)范圍為[0,2π],以下兩種寫法是等同的:
wr=windrose(h) wr=wr.draw()
wr=windrose(h,[0,2*pi]) wr=wr.draw()
調(diào)節(jié)到 [0,π]:
wr=windrose(h,[0,pi]) wr=wr.draw()
**不均勻角度:**比數(shù)據(jù)長度多1的角度序列,角度值要求[0,2π]范圍:
wr=windrose(h,[0:5:30,31:1:59]./59.*2.*pi); wr=wr.draw()
常用函數(shù):改變樣式
基本上的線條顏色,線條透明度,面透明度,線條粗細(xì)等patch
對象具有的一系列屬性,均可以依靠此setStyle
函數(shù)設(shè)置:
線條顏色: EdgeColor
線條透明度: EdgeAlpha
面透明度: FaceAlpha
線條粗細(xì):LineWidth
% 隨機(jī)數(shù)據(jù)生成并拼成矩陣 h1=randi([8,18],[1,35])+rand([1,35]); h2=randi([2,8],[1,35])+rand([1,35]); h3=randi([0,3],[1,35])+rand([1,35]); h=[h1;h2;h3]; wr=windrose(h);% 構(gòu)造堆疊圖類 wr=wr.draw(); % 繪圖 % 圖像屬性設(shè)置 wr.setStyle('LineWidth',1.2,'FaceAlpha',.8,'EdgeColor',[.2,.2,.2])
常用函數(shù):設(shè)置下界
就是添加一個圓形把中心區(qū)域密集的線條遮蓋一下,例如想要設(shè)置下界限為4,可以再之前代碼最后加入:
wr.setLConf(4)
常用函數(shù):修改顏色
修改一個顏色:(例)修改第二層的顏色:
wr.setColor([.1,.8,.1],2)
修改多個顏色:(例)修改第一、三層的顏色:
wr.setColor([0,.2,0;0 0 .2],[1,3])
添加圖例
請使用返回對象的Children
屬性添加圖例:
% 添加圖例 lgd=legend(wr.Children,'CLASS 1','CLASS 2','CLASS 3'); lgd.Location='best';
part2: 完整類函數(shù)代碼
classdef windrose % @author : slandarer % 公眾號 : slandarer隨筆 % % 使用實(shí)例: % ========================================================================= % % 隨機(jī)數(shù)據(jù)生成并拼成矩陣 % h1=randi([8,18],[1,35])+rand([1,35]); % h2=randi([2,8],[1,35])+rand([1,35]); % h3=randi([0,3],[1,35])+rand([1,35]); % h=[h1;h2;h3]; % % wr=windrose(h);% 等同于 wr=windrose(h,[0,2*pi]); % % wr=windrose(h,[0:5:30,31:1:59]./59.*2.*pi); % wr=wr.draw(); % % wr.setStyle('LineWidth',1.2,'FaceAlpha',.8,'EdgeColor',[.2,.2,.2]) % wr.setLConf(4) % % % 將第二層變成綠 % % wr.setColor([.1,.8,.1],2) % % 將第一第二層變成黑色 % % wr.setColor([0,.2,0;0 0 .2],[1,3]) % % % 添加圖例 % lgd=legend(wr.Children,'CLASS 1','CLASS 2','CLASS 3'); % lgd.Location='best'; properties HSet % mxn 大小數(shù)據(jù),m組數(shù)據(jù),每組n個柱 ThetaSet % 1x(n+1) 分隔角度 histType % 可初始化屬性 LConfHdl % 下邊界圖形對象 Parent Children end methods function obj=windrose(varargin) % 變量數(shù)據(jù)讀取及傳入 if isa(varargin{1},'matlab.graphics.axis.PolarAxes') ax=varargin{1};varargin(1)=[]; else ax=polaraxes(gcf); end hold on obj.Parent=ax; obj.HSet=varargin{1};varargin(1)=[]; if ~isempty(varargin)&&isfloat(varargin{1}) if length(varargin{1})==2 obj.ThetaSet=linspace(varargin{1}(1),varargin{1}(2),size(obj.HSet,2)+1); else obj.ThetaSet=varargin{1}; end varargin(1)=[]; else obj.ThetaSet=linspace(0,2*pi,size(obj.HSet,2)+1); end obj.histType=varargin; end function obj=draw(obj) % 循環(huán)繪圖 tCoLorList=lines(size(obj.HSet,1)); tHSet=cumsum(obj.HSet); for i=size(obj.HSet,1):-1:1 obj.Children(i)=polarhistogram(obj.Parent,'BinEdges',... obj.ThetaSet,'BinCounts',tHSet(i,:),'FaceAlpha',1,'FaceColor',tCoLorList(i,:),obj.histType{:}); end % ------------------------------------------------------------- % 繪制下邊界圓形 obj.LConfHdl=polarhistogram(obj.Parent,'BinEdges',linspace(0,2*pi,101),... 'BinCounts',ones([1,100]),'FaceColor','none','FaceAlpha',1,'EdgeColor','none'); end % ========================================================================= function setStyle(obj,varargin) % 設(shè)置屬性 for i=1:length(obj.Children) set(obj.Children(i),varargin{:}); end end function setLConf(obj,LConf)% 設(shè)置下邊界 if strcmp(LConf,'none') obj.LConfHdl.FaceColor='none'; else obj.LConfHdl.FaceColor=obj.Parent.Color; obj.LConfHdl.BinCounts=ones([1,100]).*LConf; end end function setColor(obj,colorList,n)% 顏色 k=1; for i=n set(obj.Children(i),'FaceColor',colorList(k,:)); k=k+1; end end end end
part3: 兩個使用示例
示例一
% windrose demo 1 % 隨機(jī)數(shù)據(jù)生成并拼成矩陣 h1=randi([8,18],[1,35])+rand([1,35]); h2=randi([2,8],[1,35])+rand([1,35]); h3=randi([0,3],[1,35])+rand([1,35]); h=[h1;h2;h3]; wr=windrose(h); wr=wr.draw(); % 圖像屬性設(shè)置 wr.setStyle('LineWidth',1.2,'FaceAlpha',.8,'EdgeColor',[.2,.2,.2]) % 添加下界限 wr.setLConf(4) % 將第二層變成綠 % wr.setColor([.1,.8,.1],2) % 將第一第二層變成黑色 % wr.setColor([0,.2,0;0 0 .2],[1,3]) % 添加圖例 lgd=legend(wr.Children,'CLASS 1','CLASS 2','CLASS 3'); lgd.Location='best'; % 坐標(biāo)區(qū)域修飾 ax=gca; ax.LineWidth=1.5; ax.GridLineStyle='-.'; ax.FontName='Cambria'; ax.FontSize=13;
示例二
% windrose demo 2 % 隨機(jī)數(shù)據(jù)生成并拼成矩陣 h1=randi([8,18],[1,35])+rand([1,35]); h2=randi([2,8],[1,35])+rand([1,35]); h3=randi([0,3],[1,35])+rand([1,35]); h=[h1;h2;h3]; % 生成極坐標(biāo)區(qū)域,并更改背景顏色 ax=polaraxes(gcf); ax.Color=[60,60,60]./255; ax.GridColor=[212,217,217]./255; ax.LineWidth=1.5; ax.GridLineStyle='-.'; ax.FontName='Cambria'; ax.FontSize=13; % 生成風(fēng)玫瑰圖 wr=windrose(ax,h); wr=wr.draw(); % 屬性修飾 wr.setStyle('LineWidth',1.2,'FaceAlpha',1,'EdgeColor',[.2,.2,.2]) wr.setLConf(4) % 修改顏色 colorList=[194,196,191; 212,217,217; 110,135,117]./255; wr.setColor(colorList,1:3)
到此這篇關(guān)于Matlab實(shí)現(xiàn)極坐標(biāo)堆疊柱狀圖的繪制的文章就介紹到這了,更多相關(guān)Matlab堆疊柱狀圖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
c語言_構(gòu)建一個靜態(tài)二叉樹實(shí)現(xiàn)方法
下面小編就為大家?guī)硪黄猚語言_構(gòu)建一個靜態(tài)二叉樹實(shí)現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-05-05C語言實(shí)現(xiàn)三子棋小游戲(vs2013多文件)
這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)三子棋小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-06-06C語言實(shí)現(xiàn)簡單航班管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)簡單航班管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-12-12基于Qt播放器的實(shí)現(xiàn)詳解(支持Rgb,YUV格式)
這篇文章主要為大家詳細(xì)介紹了如何利用Qt實(shí)現(xiàn)簡易的播放器,可以支持支持Rgb,YUV格式。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以嘗試一下2022-12-12