Matlab实现极坐标堆叠柱状图的绘制

目录
  • part1: 函数介绍
    • 基本使用
    • 角度范围
    • 常用函数:改变样式
    • 常用函数:设置下界
    • 常用函数:修改颜色
    • 添加图例
  • part2: 完整类函数代码
  • part3: 两个使用示例
    • 示例一
    • 示例二

极坐标堆叠图也是风玫瑰图的常用形式,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π],以下两种写法是等同的:

wr=windrose(h)
wr=wr.draw()
wr=windrose(h,[0,2*pi])
wr=wr.draw()

调节到 [0,π]:

wr=windrose(h,[0,pi])
wr=wr.draw()

**不均匀角度:**比数据长度多1的角度序列,角度值要求[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)

到此这篇关于Matlab实现极坐标堆叠柱状图的绘制的文章就介绍到这了,更多相关Matlab堆叠柱状图内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 基于Matlab实现离散系统分岔图的绘制

    目录 1.一维离散分岔图 2.二维离散分岔图 3.封面图绘制 1.一维离散分岔图 一维那非常简单哈,就循环着画呗,以下举两个简单的例子 : % x(n+1)=1-r*x(n)^2 % (r∈(0,2),x∈[-1,1])的分支混沌图. hold on f=@(x,r)1-r.*x.^2; r=0:.01:2; x=0; % x初值 for n=1:1000 x=f(x,r); if n>100 % 稳定后开始绘图 plot(r,x,'k.','MarkerSize',1); drawnow en

  • 如何利用Matlab绘制出好看的火山图

    这里画了一个示例: 数据来源 绘制效果: 代码及说明: 使用代码时只需要改一开始导入的数据,和代码提示中X坐标区域范围和Y坐标区域范围,完整代码如下所示: % 读取数据 data=readmatrix('volcano.txt'); logFC=data(:,2); padj=data(:,3); DB_not=(padj>0.5)|(logFC<0.5&logFC>-0.5); DB_up=padj<=0.05&logFC>=0.5; DB_down=pad

  • 基于Matlab绘制小提琴图的示例代码

    目录 violinChart 函数使用方法 基础使用,Y为矩阵 基础使用,Y为向量,X为标签 基础使用,多个图像绘制,并添加图例 violinChart 完整函数 ggtheme violin 函数介绍 ggtheme violin 主题 ggtheme violin 修饰函数代码 本文将为大家详细讲解Matlab中小提琴图的绘制函数及ggtheme主题修饰函数 violinChart 函数使用方法 写了个matlab绘制小提琴图的函数: 1.图中小提琴状区域为核密度曲线. 2.白色方块为25%

  • 基于Matlab实现山脊图的绘制

    目录 纯色山脊图模板 渐变色山脊图模板 写了一个用于绘制山脊图的模板,仅需要往需要填写数据的区域填入数据点击运行即可,以下提供两款模板,第一款为纯色模板而第二款为渐变色模板: 纯色山脊图模板 模板代码: function ridgeMapTMPL1 % @author: slandarer % 在这里放入你的数据======================================================= X1=normrnd(2,2,1,1000); X2=[normrnd(4

  • 利用Matlab实现图像亮度分布统计图

    写了一个输入图片,便会生成美观的图像各通道亮度分布图的函数,大概效果如下: 老样子,工具函数放在最前面,之后会介绍咋用这个函数: 工具函数 function HistogramPic(pic) FreqNum=zeros(size(pic,3),256); for i=1:size(pic,3) for j=0:255 FreqNum(i,j+1)=sum(sum(pic(:,:,i)==j)); end end ax=gca;hold(ax,'on');box on;grid on if si

  • 详解Matlab如何绘制小提琴图

    目录 1使用示例 基础使用,Y为矩阵 基础使用,Y为向量,X为标签 基础使用多个图像绘制,并添加图例 2完整代码 写了个matlab绘制小提琴图的函数: 1.图中小提琴状区域为核密度曲线 2.白色方块为25%,75%分位数 3.中间横线为中位数 4.白色点为离群值点 5.竖着的黑线是去掉离群值点后点的上下限 1使用示例 基础使用,Y为矩阵 X=1:5; Y=randn(100,5); Hdl1=violinChart(gca,X,Y,[0 0.447 0.741],0.6); X:横坐标 Y:数

  • 详解Matlab如何绘制桑基图

    目录 详细用法 1使用示例 2输入参数 3输出 函数完整代码 使用示例代码 这次主要是分享自己写的一个函数,用来绘制桑基图,效果大概是下面这样子: 先说明函数(sankey2)怎么用,函数完整代码放在博客最后 详细用法 1 使用示例 新建一个m文件,运行如下代码 List={'a1',1,'A'; 'a2',1,'A'; 'a3',1,'A'; 'a3',0.5,'C'; 'b1',1,'B'; 'b2',1,'B'; 'b3',1,'B'; 'c1',1,'C'; 'c2',1,'C'; 'c

  • Matlab实现极坐标堆叠柱状图的绘制

    目录 part1: 函数介绍 基本使用 角度范围 常用函数:改变样式 常用函数:设置下界 常用函数:修改颜色 添加图例 part2: 完整类函数代码 part3: 两个使用示例 示例一 示例二 极坐标堆叠图也是风玫瑰图的常用形式,MATLAB的bar绘制的条形图可以绘制成堆叠形式,但是并没有一个自带函数可以绘制极坐标堆叠图,而且极坐标下fill函数也不能用,于是就考虑将数据进行累加,并多次调用polarhistogram函数进行绘图,我将这个过程变为了一个方便调用的类. 以下先说明这个类该咋用,

  • Python绘制堆叠柱状图的实例

    有个朋友要求帮忙绘制堆叠柱状图,查阅了一些文档之后也算是完成了,只是一个小demo,下面我就记录一下. 1.什么是堆叠柱状图 与并排显示分类的分组柱状图不同,堆叠柱状图将每个柱子进行分割以显示相同类型下各个数据的大小情况.它可以形象的展示一个大分类包含的每个小分类的数据,以及各个小分类的占比,显示的是单个项目与整体之间的关系.效果图如下: 2.数据展示 这里展示了部分数据,主要是treatment就是对应的上图分类一,分类二:species就是对应的分组:ra就是对应的各个分组的比例. 3.Py

  • Python 堆叠柱状图绘制方法

    本文介绍了Python 堆叠柱状图绘制方法,分享给大家,具体如下: ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' >>文件: 堆叠直方图.py >>作者: liu yang >>邮箱: liuyang0001@outlook.com >>博客: www.cnblogs.com/liu66blog '''''

  • 详解如何利用JavaScript绘制堆叠柱状图

    效果图 this.state.workChartList的数据结构 const workChartList = [ { name: "居民热线", chartData: [5, 8, 8, 7, 0, 5, 6, 5, 9, 5, 4, 7] }, { name: "日常调度类", chartData: [5, 6, 8, 8, 5, 8, 5, 9, 8, 7, 3, 6] }, { name: "调度预警类", chartData: [6,

  • Python绘制百分比堆叠柱状图并填充图案

    通过Python中的matplotlib绘制百分比堆叠柱状图,并为每一个类别设置不同的填充图案.主要原因是有些论文打印出是黑白色的,不同类别之间区分不明显,所以做了这种方案. 存在一个问题:不知道如何根据填充图案设置图例,本文中可谓“曲线救国”,将图例的颜色块设置为了白色,所以如果有人知道如何根据hatching设置图例可以讨论,原始的legend方法中是未提供该类参数的. 图形如下: 代码如下 import numpy as np import matplotlib.pyplot as plt

  • C#实现运行状态堆叠柱状图

    本文实例为大家分享了C#实现运行状态堆叠柱状图的具体代码,供大家参考,具体内容如下 需求通过柱状图显示设备运行时间停止时间,稼动率等通过数据库查询记录,按小时显示显示目标数据. 界面设计 添加用户控件(窗体) 代码如下 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Windows.F

  • Python+matplotlib实现堆叠图的绘制

    目录 一.水平堆叠图 二.波浪形堆叠图 三.加上数据标签 注:本文的所有数据请移步—— 参考数据 一.水平堆叠图 堆叠图其实就是柱状图的一种特殊形式 from matplotlib import pyplot as plt plt.style.use('seaborn') plt.figure(figsize=(15,9)) plt.rcParams.update({'font.family': "Microsoft YaHei"}) plt.title("中国票房2021T

  • PyQt5+QtChart实现柱状图的绘制

    目录 柱状图分类 实现代码 效果图 柱状图分类 QBarSeries:竖向柱状图 QPercentBarSeries:竖向百分比柱状图 QStackedBarSeries:竖向堆叠柱状图 QHorizontalBarSeries:横向柱状图 QHorizontalPercentBarSeries:横向百分比柱状图 QHorizontalStackedBarSeries:横向堆叠柱状图 实现代码 import sys from PyQt5.QtGui import * from PyQt5.QtC

  • vue+echarts实现堆叠柱状图

    本文实例为大家分享了vue+echarts实现堆叠柱状图的具体代码,供大家参考,具体内容如下 echarts-子组件 <template> <div class="chart" ref="chartEle"></div> </template> <script> import echarts from "echarts"; import eventBus from '@/componen

  • Python&Matlab实现伏羲八卦图的绘制

    目录 1 与达尔文对话 2 与老子对话 2.1 Python实现 2.2 Matlab实现 1 与达尔文对话 140年前,1858年7月1日,达尔文在英伦岛发表了自己有关自然选择的杰出论文.他提出,生物的发展规律是物竞天择.经过物竞,自然界选择并存留最具生命优势的物种.这些物种愈竞愈强.直至人,已无所不能,成为统治世界的物种,这已是不争的事实.但在地球的漫长的演化史上,我们又看见,曾经统治地球的庞然大物恐龙消亡了.一-些科学家将其归之于小行星对地球的撞击.但就在我们这一代人眼前,兽中之王的老虎正

随机推荐