百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Python - seaborn | 热力图 heatmap

off999 2024-12-10 19:20 13 浏览 0 评论

这篇文章主要是介绍用seaborn绘制热力图heatmap的一些基本用法。

会涉及以下几方面内容:

  1. Openpyxl读取excel文件内容
  2. Seaborn绘制heatmap
  3. Seaborn输出成pdf

在数据处理的一些敏感信息,我用xxxxxx进行了替代,但不影响整理代码阅读

主要参考的相关网站有以下几个:

  • https://seaborn.pydata.org/generated/seaborn.heatmap.html#seaborn.heatmap
  • https://www.jianshu.com/p/d30fdfbeb312 MultiIndex
  • https://www.cnblogs.com/onemorepoint/p/8425300.html pivot_table
#------------------------引入相关库--------------------------------
import time
import os
import pandas as pd
from openpyxl import load_workbook #读取excel
import matplotlib.pyplot as plt
import seaborn as sns #heatmap
from matplotlib.backends.backend_pdf import PdfPages #plt输出成图片格式(未使用)
#------------------------读取相关数据----------------------------
# 读取主数据
md=r'C:\Users\xxxxxx.xlsx'
md_df=pd.read_excel(md,sheet_name='SKU',index_col=None,header=0) #读取SKU主数据
md_dic=dict(zip(md_df['Code'],md_df['Desciption'])) #将需要用的主数据转成dict格式
# 读取每月GM数据
tgt=r'C:\Users\ xxxxxx\SKU-GM-2023.xlsx'
src=r'C:\Users\ xxxxxx\GM rate by Product 202309.xlsx'
srcWB=load_workbook(src,data_only=True) #openpyxl读取excel文件
srcWS=srcWB['variance check'] #指定需要用sheet
gm={} #初始化一个变量,格式 sku:[gm1%,gm2%]
for row in range(3,42): #循环表格内容,读入字典
	sku=srcWS.cell(row,1).value
	if sku in md_dic.keys():
			rowData=[] #创建空列表
			for col in range(13,22): #loop columns-GM%2
					cellData=srcWS.cell(row,col).value #每个单元格值
					if cellData is None: #空值替换为0值
							cellData=0
					rowData.append(cellData)
			# print(f'sku={sku},data={rowData}')
			gm[sku]=rowData
gm_df=pd.DataFrame(gm).T #将dataframe转置成
# gm_df.reset_index(inplace=True)
gm_df1=gm_df.fillna(0) #将na填充为0值
gm_df1.columns=['202301','202302','202303','202304','202305','202306',
'202307','202308','202309','202310'] #手工维护的期间
with pd.ExcelWriter(tgt) as writer:
			gm_df1.to_excel(writer,sheet_name='2023',index=True)
srcWB.close() #不保存关闭原excel
# ---------------------------生成heatmap-----------------------------
path=r'C:\Users\ xxxxxx '
fig,axes=plt.subplots(figsize=(15,9)) #seaborn参数-图形大小
# sns.set_context({"figure.figsize":(20,20)}) #图形大小
#设置heatmap,annot=显示值;fmt=数值格式;cmap=颜色样式
#生成一个heatmap变量
heatmap=sns.heatmap(data=gm_df1,
                              annot=True, #热力单元显示数值
                              vmin=0,vmax=1, #最小\大值
                              fmt=".0%", #数字格式
                              cmap='RdBu_r', #热力图颜色
                              linecolor='white', #线条颜色
                              linewidths=0.5,) #线条大小
heatmap.set_xlabel('2023',fontsize=12) #设置x轴名称
heatmap.set_ylabel('GM%2',fontsize=9,) #设置y轴名称
yLabels=[md_dic[y] for y in gm_df1.index] #从字典md_dict获取y轴名称
heatmap.set_yticklabels(yLabels) #添加y轴承
outFile=os.path.join(path,'wusi-gm-2023.png') #输出图片名
heatmap.get_figure().savefig(outFile,dpi=720,bbox_inches='tight')
print('GM file done',time.strftime("%Y-%m-%d %H:%M:%S")) #全部完成ts

初始时gm_df的数所如下:

输出图的效果如下:

整体来说seaborn的heatmap是比较方便使用的,需要注意的是heatmap不会自动排序,如果输出的图表需要是按值排序的;需要在处理数据时在dataframe中完成排序。

相关推荐

独家 | 5 个Python高级特性让你在不知不觉中成为Python高手

你已经使用Python编程了一段时间,编写脚本并解决各种问题。是你的水平出色吗?你可能只是在不知不觉中利用了Python的高级特性。从闭包(closure)到上下文管理器(contextmana...

Python装饰器

Python装饰器是一种用于修改函数或类的行为的特殊语法。它们允许在不修改原始代码的情况下,通过将函数或类作为参数传递给另一个函数来添加额外的功能。装饰器本质上是一个函数,它接受一个函数作为参数,并返...

中高阶Python常规用法--上下文管理器

Python以简单性和通用性著称,是一种深受全球开发人员喜爱的编程语言。它提供了大量的特性和功能,使编码成为一种愉快的体验。在这些功能中,一个经常被新手忽视的强大工具是上下文管理器。上下文管理器是高...

Python小案例67- 装饰器

Python装饰器是一种用于修改函数或类的行为的特殊语法。它们允许在不修改原始代码的情况下,通过将函数或类作为参数传递给另一个函数来添加额外的功能。装饰器本质上是一个函数,它接受一个函数作为参数,并返...

python常用的语法糖

概念Python的语法糖(SyntacticSugar)是指那些让代码更简洁、更易读的语法特性,它们本质上并不会增加新功能,但能让开发者更高效地编写代码。推导式写法推导式是Python最经典的...

python - 常用的装饰器 decorator 有哪些?

python编程中使用装饰器(decorator)工具,可以使代码更简洁清晰,提高代码的重用性,还可以为代码维护提供方便。对于python初学者来说,根据装饰器(decorator)的字面意思并不...

python数据缓存怎么搞 ?推荐一个三方包供你参考,非常简单好用。

1.数据缓存说明数据缓存可以说也是项目开发中比不可少的一个工具,像我们测试的系统中,你都会见到像Redis一样的数据缓存库。使用缓存数据库的好处不言而喻,那就是效率高,简单数据直接放在缓存中...

用于时间序列数据的Graphite监视工具

结合第三方工具,Graphite为IT性能监控提供了许多好处。本文介绍其核心组件,包括Carbon、Whisper以及安装的基本准则。Graphite监视工具可实时或按需,大规模地绘制来自多个来源的时...

Python3+pygame实现的坦克大战

一、显示效果二、代码1.说明几乎所有pygame游戏,基本都遵循一定的开发流程,大体如下:初始化pygame创建窗口while循环检测以及处理事件(鼠标点击、按键等)更新UI界面2.代码创建一个m...

Python之鸭子类型:一次搞懂with与上下文装饰器

引言在鸭子类型的理念的基础之上,从关注类型,转变到关注特性和行为。结合Python中的魔法函数的体系,我们可以将自定义的类型,像内置类型一样被使用。今天这篇文章中,接着该话题,继续聊一下with语法块...

Python必会的50个代码操作

学习Python时,掌握一些常用的程序操作非常重要。以下是50个Python必会的程序操作,主要包括基础语法、数据结构、函数和文件操作等。1.HelloWorldprint("Hello,...

一文掌握Python 中的同步和异步

同步代码(Sync)同步就像在一个流水线上工作,每个任务都等待前一个任务完成。示例:机器A切割钢板→完成后,机器B钻孔→完成后,机器C上色。在Python中,同步代码看起来像这样:im...

python 标注模块timeit: 测试函数的运行时间

在Python中,可以使用内置的timeit模块来测试函数的运行时间。timeit模块提供了一个简单的接口来测量小段代码的执行时间。以下是使用timeit测试函数运行时间的一般步骤:导入...

Python带你找回童年的万花尺

还记得小时候的万花尺吧?这么画:一点也不费脑筋,就可以出来这么多丰富多彩的复杂几何图形。具体而言,可以用万花尺玩具(如图2-1所示)来绘制数学曲线。这种玩具由两个不同尺寸的塑料齿轮组成,一大一小。小的...

Python 时间模块深度解析:从基础到高级的全面指南

直接上干货一、时间模块核心类介绍序号类名说明1datetime.datetime表示一个具体的日期和时间,结合了日期和时间的信息。2datetime.date表示一个具体的日期。3datetime.t...

取消回复欢迎 发表评论: