当前位置: 首页 > news >正文

MATLAB|热力日历图

目录

日历图介绍:

热力日历图的特点:

应用场景:

绘图工具箱

属性 (Properties)

构造函数 (Constructor)

公共方法 (Methods)

私有方法 (Private Methods)

使用方法


日历图介绍:

热力日历图是一种数据可视化形式,它结合了传统日历的布局和热力图的颜色编码系统,用来表示时间序列数据的强度或数值。每个日历单元(通常是日)根据其对应的数据值被涂上不同的颜色。这种图表特别适合于展示随时间变化的模式,如温度变化、销售数据、网站流量或任何可以按天聚合的指标。

热力日历图的特点:

  • 时间维度展示:按照标准日历的格式,将数据映射到特定的日期上,方便用户理解数据在时间上的分布。用户可以快速识别出数据中的周期性模式、异常值或趋势。

  • 颜色编码:通过颜色的深浅来表示数据的量级,直观显示数值的大小。常用的颜色映射包括从蓝色(代表低值)到红色(代表高值)的渐变,或者使用如jet、hot、cool或者自定义颜色等MATLAB预设的颜色映射。

应用场景:

热力日历图可以用在许多不同的领域和场景,包括:

  • 地理信息:月天气温度、湿度、降雨量、河流流量等情况

  • 个人习惯追踪:如记录运动、睡眠、饮食等日常活动数据。

  • 业务分析:比如销售数据的日历视图,展现不同时间段的销售强度。

  • 健康监测:追踪患者的体温变化或者其他健康指标。

  • 网站分析:显示网站每日访问量,突出高流量日期。

  • 项目管理:标记项目的里程碑和截止日期,追踪项目进度。

绘图工具箱

classdef HeatmapCalendar%--------------------------------------------------------------------------% @Author: 好玩的Matlab% @公众号:好玩的Matlab% @Created: 11,02,2023% @Email: 2377389590@qq.com% 尊重劳动成果,转载请备注推文链接和公众号名,严禁商用。%--------------------------------------------------------------------------propertiesDataYearMonthColormap=hsv(255);CMapNum=255;endmethodsfunction obj = HeatmapCalendar(varargin)disp(char([20844 20247 21495 58 22909 29609 30340 77 97 116 108 97 98]))if nargin > 0for i = 1:2:narginif strcmpi(varargin{i}, 'Data')obj.Data = varargin{i+1};elseif strcmpi(varargin{i}, 'Year')obj.Year = varargin{i+1};elseif strcmpi(varargin{i}, 'Month')obj.Month = varargin{i+1};elseif strcmpi(varargin{i}, 'Colormap')obj.Colormap = varargin{i+1};elseif strcmpi(varargin{i}, 'CMapNum')obj.CMapNum = varargin{i+1};endendendif length(obj.Data)~=eomday(obj.Year,obj.Month)error('数据和当月时间数据不一致')endobj.plot();endfunction plot(obj)dayNames = {'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'};monthNames = {'January', 'February', 'March', 'April', 'May', 'June', ...'July', 'August', 'September', 'October', 'November', 'December'};firstDay = weekday(datenum(obj.Year, obj.Month, 1));daysInMonth = eomday(obj.Year,obj.Month);hold on;numWeeks = ceil((firstDay - 1 + daysInMonth) / 7)+1;title([monthNames{obj.Month},' ',num2str(obj.Year)], ...'HorizontalAlignment', 'center', 'FontSize', 16, 'FontWeight', 'bold','fontname','Times New Roman');for i = 1:length(dayNames)text((i-0.5)/7, 1-0.5/numWeeks, dayNames{i}, ...'HorizontalAlignment', 'center', 'FontSize', 12, 'FontWeight', 'bold','fontname','Times New Roman');endnormalizedData = (obj.Data - min(obj.Data)) / (max(obj.Data) - min(obj.Data));cmap = colormap(obj.makeColorMap(obj.Colormap,obj.CMapNum));obj.Colormap=cmap;dayCounter = 1;for i = 2:numWeeks+1for j = 1:7left = (j-1)/7;bottom = 1 - i/numWeeks;width = 1/7;height = 1/numWeeks;if dayCounter > daysInMonthrectangle('Position', [left, bottom, width, height], 'EdgeColor', 'none', 'FaceColor', 'none');elseif i > 1 && j >= firstDay || i > 2colorIdx = max(1, ceil(normalizedData(dayCounter) * size(cmap, 1)));cellColor = cmap(colorIdx, :);rectangle('Position', [left, bottom, width, height], 'EdgeColor',[1,1,1]*0.95, 'FaceColor', cellColor,'LineWidth',2);text(left + width/2, bottom + height/2, num2str(dayCounter),'Color',1-cellColor, ...'HorizontalAlignment', 'center', 'FontSize', 14,'FontName','Times New Roman');dayCounter = dayCounter + 1;elserectangle('Position', [left, bottom, width, height], 'EdgeColor', 'none', 'FaceColor', 'none');endendendcBar=colorbar;colormap(cBar,obj.Colormap);caxis([min(obj.Data) max(obj.Data)]);cBar.LineWidth = 1.2;cBar.TickLength = 0.015;cBar.TickDirection = 'both';cBar.FontSize=12;cBar.FontName='Times New Roman';axis([0 1 0 1]);axis off;pbaspect([1 1 1]);hold off;endendmethods(Access=private)function cMap=makeColorMap(obj,colorlist,num)color.Num= num;color.list=colorlist;for col=1:size(color.list,2)x=1:size(color.list,1);xi=linspace(1,size(color.list,1),color.Num);color.map(:,col)=interp1(x,color.list(:,col),xi);endcMap=color.map;endend
end

这个 HeatmapCalendar 类是一个 MATLAB 类,用于根据提供的数据绘制一个带有颜色映射的日历。下面是一个逐段的解释:

属性 (Properties)

  • Data:包含用于绘制日历的数据。

  • Year:年份,用于计算日期和确定日历布局。

  • Month:月份,用于计算日期和确定日历布局。

  • Colormap:一个颜色映射,用于根据 Data 的值给日历的每一天上色。默认为 hsv(255),这是MATLAB中的一个预设颜色映射。

  • CMapNum

    :颜色映射中的颜色数量,默认为255。

构造函数 (Constructor)

  • HeatmapCalendar(varargin):这个构造函数接受键值对参数,允许用户在创建类的实例时设置属性。如果提供了参数,它将设置相应的属性,并在完成后立即调用 plot 方法来绘制日历。

公共方法 (Methods)

  • plot:这是一个用于绘制日历的方法。它使用 Data, Year, Month 和 Colormap 属性。方法执行以下步骤:

    • 计算月份的第一天和天数。

    • 计算需要的周数(日历的行数)。

    • 在日历上绘制天数和对应的颜色。

    • 根据 Data 值的范围,使用颜色映射对每天的格子进行上色。

    • 绘制色标 (colorbar),设置色标的属性,如线宽、刻度长度、方向和字体。

私有方法 (Private Methods)

  • makeColorMap:这是一个辅助方法,用于从一个给定的颜色列表创建一个颜色映射。这个方法通过插值来生成指定数量的颜色,以便用于日历的颜色编码。

使用方法

默认方法

year=2023;
month=11;
data=rand(eomday(year,month),1)*100;
P=HeatmapCalendar('Data',data,'Year',year,'Month',month);

图片

设置颜色数据量

year=2023;
month=11;
data=rand(eomday(year,month),1)*100;
P=HeatmapCalendar('Data',data,'Year',year,'Month',month);
P.CMapNum=4;
P.plot();

图片

设置不同的颜色条类型

year=2023;
month=11;
data=rand(eomday(year,month),1)*100;
P=HeatmapCalendar('Data',data,'Year',year,'Month',month);
P.Colormap=winter;
P.plot();

图片

自定义颜色条​​​​​​

year=2023;
month=11;
data=rand(eomday(year,month),1)*100;
P=HeatmapCalendar('Data',data,'Year',year,'Month',month);
P.Colormap=winter;
P.Colormap=[0.0078, 0.0941, 0.7333; 0.9725, 0.0039, 0.5216];
P.plot();

图片

全年每月设置相同的颜色条类型

clc; close all; clear;
figure('Position',[1 72 1512 794])
year=2023;
colormapList={parula,turbo,hsv,hot,cool,spring,summer,autumn,winter,gray,bone,copper,pink,jet};
for month = 1:12subplot(3,4,month)data=rand(eomday(year,month),1)*100;P=HeatmapCalendar('Data',data,'Year',year,'Month',month);P.Colormap=hsv;P.CMapNum=8;P.plot();clear data
end
sgtitle(num2str(year),'fontName','Times New Roman','FontSize',16)

图片

全年每月设置不同的颜色条类型

clc; close all; clear;
figure('Position',[1 72 1512 794])
year=2023;
cMapNum=[3,4,6,8,16,16,16,16,255,255,255,255];
colormapList={parula,turbo,hsv,hot,cool,spring,summer,autumn,winter,gray,bone,copper,pink,jet};
for month = 1:12subplot(3,4,month)data=rand(eomday(year,month),1)*100;P=HeatmapCalendar('Data',data,'Year',year,'Month',month);P.Colormap=colormapList{month};P.CMapNum=cMapNum(month);P.plot();clear data
end
sgtitle(num2str(year),'fontName','Times New Roman','FontSize',16)

图片

 

相关文章:

MATLAB|热力日历图

目录 日历图介绍: 热力日历图的特点: 应用场景: 绘图工具箱 属性 (Properties) 构造函数 (Constructor) 公共方法 (Methods) 私有方法 (Private Methods) 使用方法 日历图介绍: 热力日历图是一种数据可视化形式&#xf…...

《golang设计模式》第三部分·行为型模式-05-仲裁者/中介模式(Mediator)

文章目录 1. 概述1.1 作用1.2 角色1.3 类图 2. 代码示例2.1 设计2.2 代码2.3 类图 1. 概述 仲裁者(Mediator)可以封装和协调多个对象之间的耦合交互行为,以减弱这些对象之间的耦合关联。 1.1 作用 将多个对象相互耦合的设计转变为所有对象…...

7天入门python系列之准备工作

寄语 编者打算开一个python 初学主题的系列文章,用于指导想要学习python的同学。关于文章有任何疑问都可以私信作者。对于初学者想在7天内入门Python,这是一个紧凑的学习计划。但并不是不可完成的。 7天的安排 如果你想在7天内入门Python,…...

Go语言~反射

reflect包 type name和type kindValueOf通过反射获取值通过反射设置变量的值 package mainimport ("fmt""reflect" )func reflectType(x interface{}) {obj : reflect.TypeOf(x)fmt.Println(obj, obj.Name(), obj.Kind())fmt.Printf("obj type of %…...

详解交叉验证中【KFold】【Stratified-KFold】【StratifiedShuffleSplit】的区别

交叉验证是一种统计分析方法,它的目的是通过在同一数据集上重复并分割训练和测试数据,来评估机器学习模型的性能。以下是​这三种交叉验证方法的区别: KFold(K-折叠) 在KFold交叉验证中,原始数据集被分为K个…...

数学建模比赛中常用的建模提示词(数模prompt)

以下为数学建模比赛中常用的建模提示词,希望对你有所帮助! 帮我总结一下数学建模有哪些预测类算法? 灰色预测模型级比检验是什么意思? 描述一下BP神经网络算法的建模步骤 对于分类变量与分类变量相关性分析用什么算法 前10年的数据分别是1&a…...

Spark 新特性+核心回顾

Spark 新特性核心 本文来自 B站 黑马程序员 - Spark教程 :原地址 1. 掌握Spark的Shuffle流程 1.1 Spark Shuffle Map和Reduce 在Shuffle过程中,提供数据的称之为Map端(Shuffle Write)接收数据的称之为Reduce端(Sh…...

STM32 TIM定时器,配置,详解(1)

计数器寄存器(TIMx_CNT)、预分频器寄存器(TIMx_PSC)、自动重载寄存器(TIMx_ARR)。 PSC预分频器,顾名思义,先预备一下分频,有时候频率过高,后面的定时器承受不住,就先用PSC先分频一下。如何分频的?将每接受到…...

Helix Toolkit:为.NET开发者带来的3D视觉盛宴

推荐一个基于.Net开源的3、功能强大的3D图形库和工具包,适用于WPF应用程序的3D渲染和开发。 01 项目简介 Helix Toolkit是一个开源的3D库,主要用于WPF应用程序。它有许多优点,例如提供各种各样的功能,包括基于MVVM的3D模型编辑器…...

PHP分类信息网站源码系统 电脑+手机+微信端三合一 带完整前后端部署教程

大家好啊!今天源码小编来给大家分享一款PHP分类信息网站类源码系统。这款源码系统是一套专业的信息发布类网站综合管理系统,适合各类地方信息和行业分类站点建站。随着这几年我们国家网民爆炸式的增 长,网络信息也随之越来越庞大,…...

2023年辽宁省数学建模竞赛B题数据驱动的水下导航适配区分类预测

2023年辽宁省数学建模竞赛 B题 数据驱动的水下导航适配区分类预测 原题再现: “海洋强国”战略部署已成为推动中国现代化建设的重要组成部分,国家对此提出“发展海洋经济,保护海洋生态环境,加快建设海洋强国”的明确要求。   …...

完蛋!百融云被大阳线包围了!

没想到让AI指数爬出底部的,不是离婚的两口子承诺不减持了,而是国产游戏圈神作《完蛋!我被女友包围了》。确实,资本市场不相信眼泪,AI的涨跌也与爱情无关。 之前有一个来自美国和澳大利亚的大数据团队做过一个有趣的统…...

数据结构 编程1年新手视角的平衡二叉树AVL从C与C++实现③

对应地,我们可以将insert函数中省略的操作补上 if(getBalance(node)2){ if(getBalance(node->left)1){ noderightRotate(node); //对应LL型 } else if(getBalance(node->left)-1{ node->left leftRotate(node->left); //对应LR型 noderightRotate(n…...

数据可视化PCA与t-SNE

PCA(主成分分析)和t-SNE(t分布随机近邻嵌入)都是降维技术,可以用于数据的可视化和特征提取。 降维:把数据或特征的维数降低,其基本作用包括: 提高样本密度,以及使基于欧…...

Kubernetes rancher、prometheus、ELK的安装

目录 一、rancher的安装1. 添加 Helm Chart 仓库2. 为 Rancher 创建命名空间3. 选择 SSL 配置4. 安装 cert-manager 二、prometheus安装三、EFK安装3.1安装elasticsearch3.2安装filebeat3.3安装kibana 一、rancher的安装 有关rancher的安装其实官方网站给的步骤已经很详细了&a…...

为什么我们要努力的学习编程?初学编程从哪里开始学起?

为什么我们要努力的学习编程?初学编程从哪里开始学起? 1、不论在哪里上班,都不是铁饭碗:现在全球经济低迷,使得很多企业倒闭,大到知名国企小到私营企业,大量裁员。任何人都无法保证自己现在的工…...

ffmpeg 从内存中读取数据(或将数据输出到内存)

1.为了使本文更通俗易懂,更新了部分内容,将例子改为从内存中打开。 2.增加了将数据输出到内存的方法。 从内存中读取数据 ffmpeg一般情况下支持打开一个本地文件,例如“C:\test.avi” 或者是一个流媒体协议的URL,例如“rtmp:/…...

Flink(一)【WordCount 快速入门】

前言 学完了 Hadoop、Spark,本想着先把 Kafka、Flume 这些工具先学完的,但想了想还是把核心的技术先学完最后再去把那些工具学学。 最近心有点累哈哈哈,偷偷立个 flag,反正也没人看,明年的今天来这里还愿哈&#xff0c…...

【Redis】hash数据类型-常用命令

文章目录 前置知识常用命令HSETHGETHEXISTSHDELHKEYSHVALSHGETALLHMGET关于HMSETHLENHSETNXHINCRBYHINCRBYFLOAT 命令小结 前置知识 redis自身就是键值对结构了,哈希类型是指值本⾝⼜是⼀个键值对结构,形如key"key",value{{field1…...

【大数据】Apache NiFi 数据同步流程实践

Apache NiFi 数据同步流程实践 1.环境2.Apache NIFI 部署2.1 获取安装包2.2 部署 Apache NIFI 3.NIFI 在手,跟我走!3.1 准备表结构和数据3.2 新建一个 Process Group3.3 新建一个 GenerateTableFetch 组件3.4 配置 GenerateTableFetch 组件3.5 配置 DBCP…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...

7.4.分块查找

一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

JVM垃圾回收机制全解析

Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...