pyecharts绘制天气热力图

pyecharts绘制天气热力图

文章目录

前言

一、数据源

二、成果图

三、绘制步骤

1.引入库

2.数据处理

3.绘制函数

4.保存

总结


前言

基于爬取中国气象局数据后,生成的透视表不够美观,采用excel生成报表操作重复。可以考虑使用pyecharts进行热力图生成,挂载服务器后每周生成,为其他业务预测提供参考依据。

本文主要讲解如何使用pyecharts构建并生成最终的热力图。


一、数据源

数据源:爬取中国气象局中各省份城市天气(链接)。其中101010100 为城市天气查询编码,可在网页中寻找到全部城市天气查询编码。

数据格式:需要温度带、城市、日期、最高(低)气温℃字段。日期包括去年乃至今年(即每日对应的气温都有一条去年对应的气温)。数据表格式如下:

温度带城市编码城市日期星期最高气温℃最低气温℃降雨概率%历史
0寒带101050101哈尔滨20211111NaN5-417.01
1寒带101050101哈尔滨20211112NaN4-420.01
2寒带101050101哈尔滨20211113NaN1-723.01
..............................
2911热带101310101海口202212252216NaN0
2912热带101310101海口202212262116NaN0
2913热带101310101海口202212272115NaN0


二、成果图

计算绘制当天前7天与后21天范围内的数据。

 

三、绘制步骤

1.引入库

import pandas as pd
import os,re,time,random
from pyecharts import options as opts
from pyecharts.charts import HeatMap
from pyecharts.commons.utils import JsCode

2.数据处理

path为天气数据路径。handle_data(path):读入数据后选取数据框范围,计算数值。

代码如下:

def handle_data(path):df=pd.read_excel(path)#写入时间d1 = 7*24*60*60d2 = 21*24*60*60t = time.time()date1 = int(time.strftime("%Y%m%d",time.gmtime(t-d1)))date2 = int(time.strftime("%Y%m%d",time.gmtime(t+d2)))date3 = date1 - 10000date4 = date2 - 10000df_new = df.loc[(df['日期']>=date1) & (df['日期'] <= date2),:]df_old = df.loc[(df['日期']>=date3) & (df['日期'] <= date4),:]df_new['去年最高气温℃'] = list(df_old['最高气温℃'])df_new['最高温差(今年-去年)'] = df_new['最高气温℃'] - df_new['去年最高气温℃']df_new['去年最低气温℃'] = list(df_old['最低气温℃'])df_new['最低温差(今年-去年)'] = df_new['最低气温℃'] - df_new['去年最低气温℃']return df_new

3.绘制函数

df_为计算后天气数据框,types为类型,例如绘制最高温差图,则types为数据框中的'最高温差(今年-去年)'。thermodynamic(df_,types):读入数据后,对数据进行处理。

读入后的data数据格式如下:[['1111', '哈尔滨', 5], ['1112', '哈尔滨', -4], ['1113', '哈尔滨', -1], ['1114', '哈尔滨', 1], ['1115', '哈尔滨', 2], ..., ['1206', '海口', 1], ['1207', '海口', -1], ['1208', '海口', -1], ['1209', '海口', 0]]。city列表如下:

城市温度带
2福州热带
6海口热带
.........
27长春寒带
18沈阳寒带
5哈尔滨寒带

data列表中每一个元素为['日期','城市名称','温差'],city为城市,温度带,作用是对y轴按照温度带对城市进行排序。构建两个字典,对data中的数据进行映射,日期对应于x轴(0-(len(date)-1),城市对应于y轴(0-(len(c)-1),即构建(x,y,z)。接着将温度带首次出现与城市名字相连接,并对齐,随后反转列表。

采用pyecharts开始绘制热力图即可。.add_xaxis()为x轴坐标,.add_yaxis()为设置y轴坐标,具体参数详见下文代码。

代码如下:

def thermodynamic(df_,types):#数据处理,为了下文中标签名字范围date1 = min(df_['日期'])date2 = max(df_['日期'])data = [[str(df_.iloc[i]['日期'])[4:], df_.iloc[i]['城市'], df_.iloc[i][types]] for i in range(len(df_))]date = [str(i)[4:] for i in list(df_.loc[df_['城市']=='北京',:]['日期'])]city = pd.read_excel('./city_weather.xlsx')l= ['寒带','温带','暖带','热带']city['温度带'] = city['温度带'].astype('category')city['温度带'].cat.reorder_categories(l, inplace=True)city.sort_values(['温度带','城市'], ascending=False, inplace=True)c = list(city['城市'])te = list(city['温度带'])#构建字典dict_date = {}for i in range(len(date)):dict_date[date[i]] = idict_city = {}for i in range(len(c)):dict_city[c[i]] = i#将data中的数据转换df = [[dict_date[i], dict_city[j], int(z)] for i,j,z in data]#将列表中首次出现的温度带与城市相连接,并对齐四个城市。tep = []ci = []for i in range(len(te)-1,-1,-1):if te[i] not in tep:tep.append(te[i])ci.append(f'{te[i]}{(5-len(c[i]))*"—"}{c[i]}')else:ci.append(c[i])ci.reverse()im = (HeatMap(init_opts=opts.InitOpts(width="2075px", height="899px")).add_xaxis(xaxis_data=date).add_yaxis(series_name=types,#ci:y轴城市名称yaxis_data=ci,value=df,# 图中列表的字体设置等label_opts=opts.LabelOpts(font_size=13,is_show=True,font_style = 'normal',font_family = 'Times New Roman',color="#493D26",position="inside",horizontal_align = 'center',#horizontal_align="50%"vertical_align = 'middle'),).set_series_opts().set_global_opts(title_opts=opts.TitleOpts(title=types),#工具栏,使用后不美观#toolbox_opts=opts.ToolboxOpts(),legend_opts=opts.LegendOpts(is_show=False),xaxis_opts=opts.AxisOpts(#x轴坐标倾斜,可自主设置。#axislabel_opts=opts.LabelOpts(rotate=-30),#x轴上方名称name=f'{date1}----{date2}',name_location='middle',#间距name_gap=35,name_textstyle_opts=opts.TextStyleOpts(font_family= 'Times New Roman',font_size=20,color='black',font_weight='bolder',),#类目数据type_="category",position='top',#is_scale=True,splitarea_opts=opts.SplitAreaOpts(is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)),),yaxis_opts=opts.AxisOpts(name='city',name_location='middle',name_gap=45,name_textstyle_opts=opts.TextStyleOpts(font_family= 'Times New Roman',font_size=20,color='black',font_weight='bolder',),type_="category",#type_="value",#修改y轴标签颜色axislabel_opts=opts.LabelOpts(is_show=True,position="top",color='pink',),splitarea_opts=opts.SplitAreaOpts(is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)),),visualmap_opts=opts.VisualMapOpts(range_text = [ '热','冷'],range_color = ['#1589FF','#38ACEC','#3BB9FF','#C6DEFF','#EBF4FA','#FBBBB9','#F9966B','#F75D59','#FF0000'],#range_color = ['#FF0000','#F75D59','#F9966B','#FBBBB9','#EBF4FA','#C6DEFF','#3BB9FF','#38ACEC','#1589FF'],type_='color',#颜色取值范围min_=min(df_[types]),max_=max(df_[types]),is_calculable=True,#orient="horizontal",orient = 'vertical',#pos_left="center"#pos_right = "right"pos_top = "center"),))'''# 标记线条,穿过温度带城市,使用后不美观。可在其他类型图表中使用,例如标记最高、最低,平均等。lst = [i for i in filter(lambda x: '带' in x, ci)]im.set_series_opts(markline_opts=opts.MarkLineOpts(# 标记线数据data=[# MarkLineItem:标记线数据项opts.MarkLineItem(                  name=lst[0],y = lst[0],symbol_size = None,   ),opts.MarkLineItem(                  name=lst[1],y = lst[1],symbol_size = None,   ),opts.MarkLineItem(                  name=lst[2],y = lst[2],symbol_size = None,   ),opts.MarkLineItem(                  name=lst[3],y = lst[3],symbol_size = None,   )],symbol ='circle',label_opts=opts.LabelOpts(color="#493D26"),linestyle_opts=opts.LineStyleOpts(color = 'red',opacity = 0.6,# 'solid', 'dashed', 'dotted'type_ = 'dashed',width = 0.5,)),  )'''return im

4.保存

保存为图片需要使用chromedriver,并安装snapshot-selenium。运行方法、保存图片代码如下:​​​​​​​

#path:数据文件路径
df = handle_data(path)
im = thermodynamic(df,'最高温差(今年-去年)')
#输出
im.render_notebook()
#保存
im.render(f"路径.html")#保存为图片
from snapshot_selenium import snapshot
from pyecharts.render import make_snapshot
make_snapshot(snapshot, im.render(), "test.jpeg")


总结

由于y轴为类目数据,标记线划分将会穿过数据中间,对温度带划分较不美观。可采用JsCode对y轴城市进行操作。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Echarts数据可视化series-heatmap热力图,开发全解+完美注释

全栈工程师开发手册 &#xff08;作者&#xff1a;栾鹏&#xff09; Echarts数据可视化开发代码注释全解 Echarts数据可视化开发参数配置全解 6大公共组件详解&#xff08;点击进入&#xff09;&#xff1a; title详解、 tooltip详解、toolbox详解、legend详解、dataZoom详解、…

echarts地图+热力图

综合了网上的大佬的概述&#xff0c;做了一下比较亲民的优化&#xff0c;json文件可以在下面的链接上定制&#xff0c;经纬度可以用百度地图的坐标拾取器和获取&#xff0c;图中以青岛为例&#xff0c;感谢大佬们的之前的贡献&#xff0c;可以让后来人用上现成的&#xff0c;话…

可视化 | 教你用Python实现热力图(二)

本文正在参与新星计划Python学习方向&#xff0c;详情请看&#xff1a;(93条消息) &#xff4c;&#xff49;&#xff46;&#xff45;&#xff49;&#xff4e;的博客_CSDN博客-SQL SERVER,计算机三级——数据库领域博主 目录 一、导引 二、内容 &#xff08;一&#xff0…

heatmap.js来绘制热力图

Heatmap.js 一、简介二、使用2.1 上手2.2 设置点的半径2.3 添加底图2.4 更多 三、高级用法3.1 动态热力图3.2 鼠标跟随热力图3.3 显示数值 一、简介 Heatmap.js V2.0 是目前网络上最先进的热图可视化库。新的2.0版本 Heatmap.js 更快&#xff0c;拥有更强的渲染模块&#xff0…

可视化图形(二):热力图-imshow()

官方文档&#xff1a;https://matplotlib.org/api/_as_gen/matplotlib.pyplot.imshow.html?highlightimshow#matplotlib.pyplot.imshow imshow(X, cmapNone, normNone, aspectNone, interpolationNone, alphaNone, vminNone, vmaxNone, originNone, extentNone, shapeNone, f…

网页点击热力图统计

热力图&#xff0c;要么对方填写button click的名字&#xff0c;对应后台&#xff08;类似事件&#xff09;&#xff0c;要么靠坐标系来做通用的&#xff0c;这里考虑通用做法&#xff0c;做起来也是一个通用服务。 另外&#xff0c;我这边没有调研怎么显示的&#xff0c;感觉开…

可视化神器Plotly绘制热力图

公众号&#xff1a;尤而小屋作者&#xff1a;Peter编辑&#xff1a;Peter 大家好&#xff0c;我是Peter~ 之前更新了很多关于Plotly绘图的文章。今天带来的文章是基于官网和实际案例来讲解如何绘制不同需求下的热力图。 Plotly中绘制热力图有3种方式&#xff1a;heatmap、ims…

pyecharts 画地图(热力图)(世界地图,省市地图,区县地图)

一、概述 在上一篇文章中&#xff0c;链接如下&#xff1a;https://www.cnblogs.com/xiao987334176/p/13791061.html 已经介绍了pyecharts画一些基本图形&#xff0c;接下来介绍画地图 二、世界地图 from pyecharts import options as opts from pyecharts.charts import Map f…

seaborn—sns.heatmap绘制热力图

heatmap(热力图)是识别预测变量与目标变量相关性的方法&#xff0c;同时&#xff0c;也是发现变量间是否存在多重共线性的好方法。 中文文档 seaborn.heatmap(data, vminNone, vmaxNone, cmapNone, centerNone, robustFalse, annotNone, fmt.2g, annot_kwsNone,linewidths0, …

Heatmap 热力图(1)

Heatmap 热力图&#xff08;1&#xff09; 显示多个对象&#xff0c;单个属性之间的关系的时候&#xff0c;用柱状图就可以直观的比较&#xff1b;当需要比较多个对象多个属性之间的差异时&#xff0c;需要用热力图。 基于R的heatmaply和plotly交互式热力图 安装&#xff1a;…

Tableau-热力图

Tableau-表格基础上制作热力图 前言1、度量维度制作热力图1.1 拖拽维度到行或者列1.2 拖拽度量1.3 标记度量数据为颜色 2、维度维度制作热力图2.1 拖拽两个维度分别当作行和列2.2 拖拽度量 前言 热力图的制作方便我们进行根据颜色的深浅直接观察&#xff0c;而颜色深浅又是由相…

【热力图】区域地图热力图,百度地图api

最简单的地图热力图&#xff0c;用的是百度的api&#xff0c;所以取经纬度的时候最好也用百度地图。 这里已经填好百度api的key了&#xff0c;但还是建议大家注册使用自己的key&#xff0c;因为有每日额度&#xff0c;超过访问次数了就不可用了。 <script type"text/…

python热力图实现

目录 一、数据无量纲化处理 (热力图) 1.数据无量纲化处理(仅介绍本文用到的方法):min-max归一化 2.代码展示 3.效果展示 二、皮尔斯系数相关(热力图) 1.数学知识 2.代码展示(有不懂的可以私聊) 3.seaborn.heatmap属性介绍 1&#xff09;Seaborn是基于matplotlib的Pyth…

一、python可视化——热力图

热力图 1、利用热力图可以看数据表里多个特征两两的相似度。参考官方API参数及地址&#xff1a; seaborn.heatmap(data, vminNone, vmaxNone,cmapNone, centerNone, robustFalse, annotNone, fmt’.2g’, annot_kwsNone,linewidths0, linecolor’white’, cbarTrue, cbar_kws…

(GIS可视化)热力图

我们经常在百度地图上看到类似这种的热力图&#xff0c;那么这种热力图究竟是什么原理&#xff1f;我们如何应用它来分析实际问题呢&#xff1f; 1.热力图原理 热力图这个名字可能听起来很高大上&#xff0c;但是实际上它等同于我们常说的密度图。 看到上面的图片你可能 会想…

echarts 热力图heatmap

1、配置data热力图主要通过颜色去表现数值的大小,必须要配合visualMap组件使用。可以应用在直角坐标系以及地理坐标系上直角坐标系上必须要使用两个类目轴。当坐标轴为直接坐标轴时,根据x、y轴每项数据相交形成的网格来进行定位,如x:[aa,bb],y:[cc,dd],(0,0)表示第一排第一个da…

热力图可视化 plt cmap

热力图可视化 import matplotlib.pyplot as plt plt.imsave(savename, data, vmin0, vmaxdata_max, cmapturbo)cmap 的其它选择&#xff08;如 magma&#xff0c;jet&#xff09;&#xff1a; 其中cmap"jet"结果类似如下&#xff1a;

热力图 sns.heatmap 调整 图内,坐标轴,color bar 字体大小

原始 首先准备一个文件&#xff0c;我用的是csv文件 我们先看一下最原始的效果&#xff1a; 代码为&#xff1a; student pd.read_csv(./input/small_data.csv) plt.figure(figsize(25, 10)) sns.heatmap(student.corr(), annotTrue, cmapYlGnBu) plt.savefig(relevance.pn…

Origin制图之热力图(hot-map)

软件版本&#xff1a;origin 2022&#xff0c;下载链接在博主的其他文章中查看。 1.首先是数据&#xff0c;第一列为x的标签&#xff0c;可以是数值也可以是本文&#xff0c;本测试用test代替。其余为热力图数据数值。除此以外还需要Y标签或者数值。 2.按如图所示&#xff0c;拷…

热力图heatmap

这个方法又称Class Activation Map(CAM类激活映射)&#xff0c;由于这是基于分类问题的一种可视化技术&#xff0c;并且只有将全连接层改为全局平均池化才能较好的保存图像的空间信息&#xff0c;这对于训练是不利的。2017年提出了Grad-CAM&#xff0c;可以在不改变网络结构的情…