點擊上方藍字和“好玩的MATLAB”一起快樂玩耍吧!
0f042y3kcwx64015143941.jpg (236.67 KB, 下載次數(shù): 0)
下載附件
保存到相冊
0f042y3kcwx64015143941.jpg
2024-9-9 17:21 上傳
好玩的matlab
帶你解鎖不一樣的matlab新玩法
今天介紹一下熱力日歷圖,喜歡此推文的小伙伴們記得點贊+關(guān)注+分享!【尊重作者勞動成果,轉(zhuǎn)載請注明推文鏈接和公眾號名】
效果圖
vu5hh2wt2l064015144042.png (114.55 KB, 下載次數(shù): 0)
下載附件
保存到相冊
vu5hh2wt2l064015144042.png
2024-9-9 17:21 上傳
mwtqna0f3zw64015144142.gif (224.52 KB, 下載次數(shù): 0)
下載附件
保存到相冊
mwtqna0f3zw64015144142.gif
2024-9-9 17:21 上傳
熱力日歷圖介紹熱力日歷圖是一種數(shù)據(jù)可視化形式,它結(jié)合了傳統(tǒng)日歷的布局和熱力圖的顏色編碼系統(tǒng),用來表示時間序列數(shù)據(jù)的強度或數(shù)值。每個日歷單元(通常是日)根據(jù)其對應(yīng)的數(shù)據(jù)值被涂上不同的顏色。這種圖表特別適合于展示隨時間變化的模式,如溫度變化、銷售數(shù)據(jù)、網(wǎng)站流量或任何可以按天聚合的指標。
熱力日歷圖的特點:時間維度展示:按照標準日歷的格式,將數(shù)據(jù)映射到特定的日期上,方便用戶理解數(shù)據(jù)在時間上的分布。用戶可以快速識別出數(shù)據(jù)中的周期性模式、異常值或趨勢。顏色編碼:通過顏色的深淺來表示數(shù)據(jù)的量級,直觀顯示數(shù)值的大小。常用的顏色映射包括從藍色(代表低值)到紅色(代表高值)的漸變,或者使用如jet、hot、cool或者自定義顏色等MATLAB預(yù)設(shè)的顏色映射。應(yīng)用場景:熱力日歷圖可以用在許多不同的領(lǐng)域和場景,包括:
地理信息:月天氣溫度、濕度、降雨量、河流流量等情況個人習(xí)慣追蹤:如記錄運動、睡眠、飲食等日常活動數(shù)據(jù)。業(yè)務(wù)分析:比如銷售數(shù)據(jù)的日歷視圖,展現(xiàn)不同時間段的銷售強度。健康監(jiān)測:追蹤患者的體溫變化或者其他健康指標。網(wǎng)站分析:顯示網(wǎng)站每日訪問量,突出高流量日期。項目管理:標記項目的里程碑和截止日期,追蹤項目進度。
繪圖工具箱HeatmapCalendar【點贊、收藏=學(xué)會】
classdef HeatmapCalendar %-------------------------------------------------------------------------- % @Author: 好玩的Matlab % @公眾號:好玩的Matlab % @Created: 11,02,2023 % @Email: 2377389590@qq.com % 尊重勞動成果,轉(zhuǎn)載請備注推文鏈接和公眾號名,嚴禁商用。 %-------------------------------------------------------------------------- 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('數(shù)據(jù)和當月時間數(shù)據(jù)不一致') 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 endend這個 HeatmapCalendar 類是一個 MATLAB 類,用于根據(jù)提供的數(shù)據(jù)繪制一個帶有顏色映射的日歷。下面是一個逐段的解釋:
屬性 (Properties)Data:包含用于繪制日歷的數(shù)據(jù)。Year:年份,用于計算日期和確定日歷布局。Month:月份,用于計算日期和確定日歷布局。Colormap:一個顏色映射,用于根據(jù) Data 的值給日歷的每一天上色。默認為 hsv(255),這是MATLAB中的一個預(yù)設(shè)顏色映射。CMapNum:顏色映射中的顏色數(shù)量,默認為255。構(gòu)造函數(shù) (Constructor)HeatmapCalendar(varargin):這個構(gòu)造函數(shù)接受鍵值對參數(shù),允許用戶在創(chuàng)建類的實例時設(shè)置屬性。如果提供了參數(shù),它將設(shè)置相應(yīng)的屬性,并在完成后立即調(diào)用 plot 方法來繪制日歷。公共方法 (Methods)plot:這是一個用于繪制日歷的方法。它使用 Data, Year, Month 和 Colormap 屬性。方法執(zhí)行以下步驟:計算月份的第一天和天數(shù)。計算需要的周數(shù)(日歷的行數(shù))。在日歷上繪制天數(shù)和對應(yīng)的顏色。根據(jù) Data 值的范圍,使用顏色映射對每天的格子進行上色。繪制色標 (colorbar),設(shè)置色標的屬性,如線寬、刻度長度、方向和字體。私有方法 (Private Methods)makeColorMap:這是一個輔助方法,用于從一個給定的顏色列表創(chuàng)建一個顏色映射。這個方法通過插值來生成指定數(shù)量的顏色,以便用于日歷的顏色編碼。
使用方法默認方法year=2023;month=11;data=rand(eomday(year,month),1)*100;P=HeatmapCalendar('Data',data,'Year',year,'Month',month);
sa1g4dk3uro64015144242.png (24.38 KB, 下載次數(shù): 0)
下載附件
保存到相冊
sa1g4dk3uro64015144242.png
2024-9-9 17:21 上傳
設(shè)置顏色數(shù)據(jù)量year=2023;month=11;data=rand(eomday(year,month),1)*100;P=HeatmapCalendar('Data',data,'Year',year,'Month',month);P.CMapNum=4;P.plot();
ttcucve5y0d64015144344.png (22.14 KB, 下載次數(shù): 0)
下載附件
保存到相冊
ttcucve5y0d64015144344.png
2024-9-9 17:21 上傳
設(shè)置不同的顏色條類型year=2023;month=11;data=rand(eomday(year,month),1)*100;P=HeatmapCalendar('Data',data,'Year',year,'Month',month);P.Colormap=winter;P.plot();
slgy1bq3dxw64015144444.png (24 KB, 下載次數(shù): 0)
下載附件
保存到相冊
slgy1bq3dxw64015144444.png
2024-9-9 17:21 上傳
自定義顏色條
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();
5dvux1x4v5k64015144544.png (23.59 KB, 下載次數(shù): 0)
下載附件
保存到相冊
5dvux1x4v5k64015144544.png
2024-9-9 17:21 上傳
全年每月設(shè)置相同的顏色條類型
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 dataendsgtitle(num2str(year),'fontName','Times New Roman','FontSize',16)
y0mlwygcs1o64015144644.png (157.72 KB, 下載次數(shù): 0)
下載附件
保存到相冊
y0mlwygcs1o64015144644.png
2024-9-9 17:21 上傳
全年每月設(shè)置不同的顏色條類型
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 dataendsgtitle(num2str(year),'fontName','Times New Roman','FontSize',16)
5h0mkzsqk5k64015144744.png (158.31 KB, 下載次數(shù): 0)
下載附件
保存到相冊
5h0mkzsqk5k64015144744.png
2024-9-9 17:21 上傳
- -THE END- -
源碼下載:gitee下載:https://gitee.com/iDMatlab/HeatmapCalendar
dhhzwfjlgn564015144845.png (86.69 KB, 下載次數(shù): 0)
下載附件
保存到相冊
dhhzwfjlgn564015144845.png
2024-9-9 17:21 上傳
QQ 群下載:
cbtpok3ruoq64015144945.png (514.09 KB, 下載次數(shù): 0)
下載附件
保存到相冊
cbtpok3ruoq64015144945.png
2024-9-9 17:21 上傳
fileexchange 下載:
3mcg4ef5hfz64015145045.png (44 KB, 下載次數(shù): 0)
下載附件
保存到相冊
3mcg4ef5hfz64015145045.png
2024-9-9 17:21 上傳
參考資料
【1】https://github.com/wa0x6e/cal-heatmap
wnowzxvhiye64015145145.gif (10.71 KB, 下載次數(shù): 0)
下載附件
保存到相冊
wnowzxvhiye64015145145.gif
2024-9-9 17:21 上傳
vnfhnzsseak64015145245.png (696 Bytes, 下載次數(shù): 0)
下載附件
保存到相冊
vnfhnzsseak64015145245.png
2024-9-9 17:21 上傳
送書活動
44fbkba0myi64015145345.png (696 Bytes, 下載次數(shù): 0)
下載附件
保存到相冊
44fbkba0myi64015145345.png
2024-9-9 17:21 上傳
hy1eprtxsi064015145445.gif (10.71 KB, 下載次數(shù): 0)
下載附件
保存到相冊
hy1eprtxsi064015145445.gif
2024-9-9 17:21 上傳
包郵贈送 「北京大學(xué)出版社」贊助《Origin科研繪圖與學(xué)術(shù)圖表繪制從入門到精通》
skrfoqrvnin64015145545.jpg (272.22 KB, 下載次數(shù): 0)
下載附件
保存到相冊
skrfoqrvnin64015145545.jpg
2024-9-9 17:21 上傳
1.由淺入深,循序漸進:本書以初級和中級讀者為對象,首先從Origin使用基礎(chǔ)講起,再輔以O(shè)rigin在實際工作中的應(yīng)用案例,幫助讀者盡快掌握利用Origin繪制科技圖形和進行數(shù)據(jù)處理的技能。2.步驟詳盡,內(nèi)容新穎:本書結(jié)合作者多年的Origin使用經(jīng)驗與實際科研工作的應(yīng)用案例,將Origin軟件的使用方法與技巧詳細地講解給讀者。講解步驟詳盡、內(nèi)容新穎,并輔以相應(yīng)的圖片,使讀者在閱讀時一目了然,從而快速掌握書中所講內(nèi)容。3.實例典型,輕松易學(xué):通過學(xué)習(xí)實際案例的具體操作是掌握Origin的方式。本書通過綜合應(yīng)用案例,透徹詳盡地講解了Origin在曲線擬合、數(shù)字信號處理、峰擬合和光譜分析、統(tǒng)計分析等多個方面的應(yīng)用。4.全彩印刷:圖表案例精彩呈現(xiàn),帶來良好的閱讀體驗,方便理解和學(xué)習(xí)。
【抽獎方式及滿足條件】:
1.關(guān)注「好玩的MATLAB 」公眾號和視頻號
mw2vfttbvkv64015145645.jpg (183.22 KB, 下載次數(shù): 0)
下載附件
保存到相冊
mw2vfttbvkv64015145645.jpg
2024-9-9 17:21 上傳
2.給本文點【贊】+【在看】;
3.留言區(qū)評論點贊最多的前3名。
4.本活動只針對從未獲過獎的同學(xué),之前獲過獎的小伙伴,不用參加。
同時滿足上述4個條件的讀者朋友,包郵贈送一本:
【開獎時間】:2023年11月4日夜晚8點
【領(lǐng)獎方式】:在開獎時加小編私人微信:idmatlab
掃一掃加管理員微信
4p0fdfpbsm364015145746.png (3.14 KB, 下載次數(shù): 0)
下載附件
保存到相冊
4p0fdfpbsm364015145746.png
2024-9-9 17:21 上傳
gfvqptxfkwe64015145846.jpg (71.27 KB, 下載次數(shù): 0)
下載附件
保存到相冊
gfvqptxfkwe64015145846.jpg
2024-9-9 17:21 上傳
|