MATLAB|热力日历图

news2024/9/29 13:18:30

目录

日历图介绍:

热力日历图的特点:

应用场景:

绘图工具箱

属性 (Properties)

构造函数 (Constructor)

公共方法 (Methods)

私有方法 (Private Methods)

使用方法


日历图介绍:

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

热力日历图的特点:

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

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

应用场景:

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

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

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

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

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

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

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

绘图工具箱

classdef HeatmapCalendar
    %--------------------------------------------------------------------------
    % @Author: 好玩的Matlab
    % @公众号:好玩的Matlab
    % @Created: 11,02,2023
    % @Email: 2377389590@qq.com
    % 尊重劳动成果,转载请备注推文链接和公众号名,严禁商用。
    %--------------------------------------------------------------------------
    properties
        Data
        Year
        Month
        Colormap=hsv(255);
        CMapNum=255;
    end
    methods
        function obj = HeatmapCalendar(varargin)
            disp(char([20844 20247 21495 58 22909 29609 30340 77 97 116 108 97 98]))
            if nargin > 0
                for i = 1:2:nargin
                    if 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};
                    end
                end
            end
            if length(obj.Data)~=eomday(obj.Year,obj.Month)
                error('数据和当月时间数据不一致')
            end
            obj.plot();
        end
        function 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');
            end
            normalizedData = (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+1
                for j = 1:7
                    left = (j-1)/7;
                    bottom = 1 - i/numWeeks;
                    width = 1/7;
                    height = 1/numWeeks;
                    if dayCounter > daysInMonth
                        rectangle('Position', [left, bottom, width, height], 'EdgeColor', 'none', 'FaceColor', 'none');
                    elseif i > 1 && j >= firstDay || i > 2
                        colorIdx = 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;
                    else
                        rectangle('Position', [left, bottom, width, height], 'EdgeColor', 'none', 'FaceColor', 'none');
                    end
                end
            end
            cBar=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;
        end
    end
    methods(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);
            end
            cMap=color.map;
        end
    end
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:12
    subplot(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:12
    subplot(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)

图片

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1181325.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Pioneer电源维修PM36218B-10P-1-8PH-J

开关电源出现不启振的时候,我们通常需要查看开关频率是否正确、保护电路是否断路、电压反馈电路、电流反馈电路又没问题,开关管是否击穿等。 pioneer电源维修时,PWM模块为UC3843,检测未发现其他异常,在R(220K)上并接一…

美妆行业如何通过自媒体提升品牌曝光

自媒体的出现使美妆行业的推广方式产生了变化,自媒体平台的用户年轻化、用户基数大、消费力较强,能够接受新鲜事物,为美妆品牌带来广阔的市场和消费人群。 因此自媒体平台的内容运营十分重要,今天媒介盒子就来和大家聊聊&#xf…

VBA技术资料MF80:选择文件及文件夹

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。我的教程一共九套,分为初级、中级、高级三大部分。是对VBA的系统讲解,从简单的入门,到…

ARPG----C++学习记录03 Section7位置,偏移,函数

Pawn 新建一个Pawn的c类Bird,并且新建一个蓝图 添加一个Capsule(胶囊) 不知道要加啥头文件,去网站找https://docs.unrealengine.com/5.3/en-US/API/Runtime/Engine/Components/UCapsuleComponent/SetCapsuleSize/ 包含文件名字的头…

【vue3/高德地图】实现地图打点/自定义点位图标/地理围栏实现

<template><div class"app-container"><div id"container"></div></div> </template><script setup> import AMapLoader from amap/amap-jsapi-loader; /*在Vue3中使用时,需要引入Vue3中的shallowRef方法(使用s…

Microsoft Edge浏览器不兼容解决办法

找到 Edge 的安装位置&#xff0c;一般在 C:\Program Files (x86)Microsoft Edge\Application\ 这个目录&#xff0c;把 edge.exe 或msedge.exe 修改为 chrome.exe 再重启电脑。

DocTemplateTool - 可根据模板生成word或pdf文件的工具

你是否经常遇到这样的场景&#xff1a;产品运营有着大量的报告需求&#xff0c;或者给客户领导展现每周的运营报告&#xff1f;这些文档类的任务可以交给运营同事&#xff0c;他们负责文档排版和样式&#xff0c;你作为开发人员你只需要提供数据源&#xff0c;和一个映射表&…

C++ -std 编译标准

概述 任何一门编程语言都有相关的组织和团体在不停的维护和更新。原因很简单&#xff0c;时代在发展&#xff0c;编程语言如果停滞不前&#xff0c;最终就会被淘汰。 以 C 语言为例&#xff0c;发展至今该编程语言已经迭代了诸多个版本&#xff0c;例如 C89 &#xff08;偶尔…

十大字体设计网站年终盘点:顶级设计师独家推荐

即时设计 首款国产的专业 UI 设计工具即时设计&#xff0c;官方字体库内置几十种字体任你选择&#xff0c;例如阿里巴巴惠普体、思源宋体、思源黑体、优设标题黑等&#xff0c;一键点击使用无需下载安装。还能够根据设计内容进行字体粗细调节&#xff0c;从纤细到特粗&#xf…

基准测试详解

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

柱状图:带误差棒

误差棒可以表示样本标准差&#xff0c;也可以表示样本标准误。 导入库&#xff1a; import pandas as pd 自定义用来绘制带误差棒&#xff08;样本标准差或样本标准误&#xff09;的柱状图&#xff1a; def col(y, x, face, df, errprbarstd) : print(ggplot(df.groupby([x…

el-checkbox-group的全选与反选

需求如下&#xff1a; 思路&#xff1a;在点击全部时按钮组双向绑定赋值全部值&#xff0c;点击按钮组内按钮计算选中按钮数量与按钮组数量对比&#xff0c;判定是否选中全部 代码如下&#xff1a; <template><div><el-checkbox-button v-model"checkall…

视频去水印怎么去?3个简单的去水印方法分享

当我们需要视频去水印怎么去时&#xff0c;了解如何有效地去除视频水印变得至关重要,在日常使用视频资源的过程中&#xff0c;我们可能会遇到一些带有品牌标志或文字水印的视频&#xff0c;这些水印可能会影响视频的观赏体验&#xff0c;特别是当我们需要将视频用于学习、研究或…

viple入门(五)

&#xff08;1&#xff09;自定义活动 自定义活动&#xff0c;用来创建新的组件、服务、函数或者其他代码模块&#xff0c;使用最多的是创建函数。 函数是对一个功能的封装&#xff0c;在调用的时候执行&#xff0c;没有调用的时候则不执行。函数可能有参数&#xff0c;可能没…

Java代码如何对Excel文件进行zip压缩

1&#xff1a;新建 ZipUtils 工具类 package com.ly.cloud.datacollection.util;import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.net.URLEncoder; import ja…

文件过大放不到U盘怎么办?三个方法轻松搞定!

文件过大放不了U盘我们可以从文件过大这个角度来解决一下这个问题&#xff0c;可以借助一些工具把文件压缩后&#xff0c;体积变小后&#xff0c;再放入U盘&#xff0c;使得u盘得到高效的利用&#xff0c;下面是推荐的一些好用的软件。 一、嗨格式压缩大师 是一款可以压缩多种…

idea 模板注释 {@link}

1. 新增组 2. 设置方法注释及变量 增加模板文本 ** * $param$ * return {link $return$} */3. 设置变量表达式 勾选跳过param 参数表达式 groovyScript("def result ;def params \"${_1}\".replaceAll([\\\\[|\\\\]|\\\\s], ).split(,).toList();def param…

【案例卡】clickhouse:多行数据拼接在一行

一、需求 针对clickhouse数据库中&#xff0c;group by 分组后的字符串字段&#xff0c;拼接处理在一行的问题实现。在mysql中&#xff0c;可以用group_concat()函数来实现&#xff0c;而clickhouse数据库不支持此函数&#xff0c;特此记录实现方式。 二、clickhouse相关函数…

C++模板元模板实战书籍讲解第一章题目讲解

目录 第一题 C代码示例 第二题 C代码示例 第三题 3.1 使用std::integral_constant模板类 3.2 使用std::conditional结合std::is_same判断 总结 第四题 C代码示例 第五题 C代码示例 第六题 C代码示例 第七题 C代码示例 总结 第一题 对于元函数来说&#xff0c;…

AIGPT重大升级,界面重新设计,功能更加饱满,用户体验升级

AIGPT AIGPT是一款功能强大的人工智能技术处理软件&#xff0c;不但拥有其他模型处理文本认知的能力还有AI绘画模型、拥有自身的插件库。 我们都知道使用ChatGPT是需要账号以及使用魔法的&#xff0c;实现其中的某一项对我们一般的初学者来说都是一次巨大的挑战&#xff0c;但…