当前位置:网站首页>如何使用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)
完
边栏推荐
- 新一代网状网协议T-Mesh无线通信技术优势介绍
- Small Tools (4) integrated Seata1.5.2 distributed transactions
- 产品以及研发团队有使用专业的办公软件,如禅道、蓝湖等,他们应该如何使用 Tita 系统?
- window.open does not show favicon.icon
- 瞌睡检测系统介绍
- Introduction to the advantages of the new generation mesh network protocol T-Mesh wireless communication technology
- 【Unity入门计划】基本概念(6)-精灵渲染器 Sprite Renderer
- posgresql 到 es 报这个错误 ,啥意思
- 为什么我强烈推荐使用智能化async?
- GTK实现旋转加载动画
猜你喜欢
ModelWhale 云端运行 WRF 中尺度数值气象模式,随时随地即开即用的一体化工作流
小熊派——无线联网开发
攻防世界----bug
How to get the 2 d space prior to ViT?UMA & Hong Kong institute of technology & ali SP - ViT, study for visual Transformer 2 d space prior knowledge!.
Not to be ignored!Features and advantages of outdoor LED display
MySQL性能优化_小表驱动大表
AI+BI+可视化,Sugar BI架构深度剖析
一文看懂推荐系统:概要02:推荐系统的链路,从召回粗排,到精排,到重排,最终推荐展示给用户
破解数字化转型困局,企业分析协同场景案例解析
【深度学习】今日bug(8月2)
随机推荐
【QT】Qt 给已经开发好的程序快速封装成动态库
想进阿里?先来搞懂一下分布式事务
PWA 应用 Service Worker 缓存的一些可选策略和使用场景
移动应用出海,你的“网络优化”拖后腿了吗?
How to prevent hacking Windows server security Settings
开源一夏 | 打工人的第25天-曾经的考研人
高可用版 主数据库数据结构改变 备数据库会自动改变吗
ECCV 2022 | 基于关系查询的时序动作检测方法
产品以及研发团队有使用专业的办公软件,如禅道、蓝湖等,他们应该如何使用 Tita 系统?
devops-2:Jenkins的使用及Pipeline语法讲解
How much do you know about the intelligent operation and maintenance service of data warehouse based on DMS?
Small Tools(4) 整合Seata1.5.2分布式事务
基于牛顿方法在直流微电网潮流研究(Matlab代码实现)
Small Tools (4) integrated Seata1.5.2 distributed transactions
爬虫注意
人脸识别损失函数的汇总 | Pytorch版本实现
When mobile applications go overseas, is your "network optimization" holding back?
STM32 GPIO LED和蜂鸣器实现【第四天】
使用VS Code搭建ESP-IDF环境
MATLAB gcf图窗保存图像,黑色背景/透明背景