当前位置:网站首页>如何使用MATLAB绘制极坐标堆叠柱状图
如何使用MATLAB绘制极坐标堆叠柱状图
2022-08-03 15:58:00 【slandarer】
极坐标堆叠图也是风玫瑰图的常用形式,MATLAB的bar绘制的条形图可以绘制成堆叠形式,但是并没有一个自带函数可以绘制极坐标堆叠图,而且极坐标下fill函数也不能用,于是就考虑将数据进行累加,并多次调用polarhistogram函数进行绘图,我将这个过程变为了一个方便调用的类。
以下先说明这个类该咋用,之后再给出类的完整代码:
part1: 函数介绍
基本使用
h的每一行代表要绘制一层柱状图的数据,这里要绘制三层的堆叠柱状图:
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(); % 绘图

其中wr=windrose(h)是构造类的过程,第一个输入可以是高度矩阵,也可以是当前的极坐标区域,绘制的角度范围可以省略。
角度范围
构造函数的角度范围可以省略,默认范围为 [ 0 , 2 π ] [0,2\pi] [0,2π],以下两种写法是等同的:
wr=windrose(h)
wr=wr.draw()
wr=windrose(h,[0,2*pi])
wr=wr.draw()

调节到 [ 0 , π ] [0,\pi] [0,π]:
wr=windrose(h,[0,pi])
wr=wr.draw()

**不均匀角度:**比数据长度多1的角度序列,角度值要求 [ 0 , 2 π ] [0,2\pi] [0,2π]范围:
wr=windrose(h,[0:5:30,31:1:59]./59.*2.*pi);
wr=wr.draw()

常用函数:改变样式
基本上的线条颜色,线条透明度,面透明度,线条粗细等patch对象具有的一系列属性,均可以依靠此setStyle函数设置:
- 线条颜色: EdgeColor
- 线条透明度: EdgeAlpha
- 面透明度: FaceAlpha
- 线条粗细:LineWidth
% 随机数据生成并拼成矩阵
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(); % 绘图
% 图像属性设置
wr.setStyle('LineWidth',1.2,'FaceAlpha',.8,'EdgeColor',[.2,.2,.2])

常用函数:设置下界
就是添加一个圆形把中心区域密集的线条遮盖一下,例如想要设置下界限为4,可以再之前代码最后加入:
wr.setLConf(4)

常用函数:修改颜色
修改一个颜色:(例)修改第二层的颜色:
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: 完整类函数代码
classdef windrose
% @author : slandarer
% 公众号 : slandarer随笔
%
% 使用实例:
% =========================================================================
% % 随机数据生成并拼成矩阵
% 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 大小数据,m组数据,每组n个柱
ThetaSet % 1x(n+1) 分隔角度
histType % 可初始化属性
LConfHdl % 下边界图形对象
Parent
Children
end
methods
function obj=windrose(varargin)
% 变量数据读取及传入
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) % 循环绘图
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) % 设置属性
for i=1:length(obj.Children)
set(obj.Children(i),varargin{
:});
end
end
function setLConf(obj,LConf)% 设置下边界
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
% 随机数据生成并拼成矩阵
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();
% 图像属性设置
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';
% 坐标区域修饰
ax=gca;
ax.LineWidth=1.5;
ax.GridLineStyle='-.';
ax.FontName='Cambria';
ax.FontSize=13;

示例二
% windrose demo 2
% 随机数据生成并拼成矩阵
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];
% 生成极坐标区域,并更改背景颜色
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;
% 生成风玫瑰图
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)

完
边栏推荐
- Spark entry learning-2
- ModelWhale 云端运行 WRF 中尺度数值气象模式,随时随地即开即用的一体化工作流
- 高压直流输电(HVDC)的最优潮流(OPF)(Matlab代码实现)
- CS免杀姿势
- MPLS的wpn实验
- 开源一夏 | 打工人的第25天-曾经的考研人
- Some optional strategies and usage scenarios for PWA application Service Worker caching
- Introduction to the advantages of the new generation mesh network protocol T-Mesh wireless communication technology
- Fortinet产品导入AWS AMI操作文档
- CopyOnWriteArrayList详解
猜你喜欢

Introduction to the advantages of the new generation mesh network protocol T-Mesh wireless communication technology

AI+BI+可视化,Sugar BI架构深度剖析

ModelWhale 云端运行 WRF 中尺度数值气象模式,随时随地即开即用的一体化工作流
![[微信小程序开发者工具] × #initialize](/img/38/ea90525f53de3933a808f0d75028b0.png)
[微信小程序开发者工具] × #initialize

TCP 可靠吗?为什么?

我在滴滴做开源

带你了解什么是 Web3.0

参与便有奖,《新程序员》杂志福利来袭!
![[Unity Getting Started Plan] Basic Concepts (8) - Tile Map TileMap 01](/img/8e/fcf79d150af4384c14a118fb209725.png)
[Unity Getting Started Plan] Basic Concepts (8) - Tile Map TileMap 01

证实了,百度没有快照了
随机推荐
实时渲染流程操作复杂吗,如何实现?
生态剧变,电子签名SaaS模式迎来新突破,网络效应加速到来
mysql delete 执行报错:You can‘t specify target table ‘doctor_info‘ for update in FROM clause
5 v 8.4 v1A charging current charging management IC
请问下,flink cdc监控oracle,我看源码是通过sid方式的,请问怎么改成service
STM32 GPIO LED和蜂鸣器实现【第四天】
5v充8.4v1A电流充电管理ic
MPLS的wpn实验
一文看懂推荐系统:召回02:Swing 模型,和itemCF很相似,区别在于计算相似度的方法不一样
高可用版 主数据库数据结构改变 备数据库会自动改变吗
13 and OOM simulation
devops-2:Jenkins的使用及Pipeline语法讲解
Awesome!Coroutines are finally here!Thread is about to be in the past
2021年数据泄露成本报告解读
2021年数据泄露成本报告解读
微电网和直流电网中最优潮流(OPF)的凸优化(Matlab代码实现)
Ark server opening tutorial win
49 万奖金等你来拿!第四届实时计算 Flink 挑战赛启动,Beyond Stream Processing!
STM32 GPIO LED and buzzer implementation [Day 4]
请问大家,MySQL全量怎么样可以提高性能呢?我这里瓶颈是在Source上,在不增加并行度的情况下,