首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >利用热图探索温度变化

利用热图探索温度变化

作者头像
HsuHeinrich
发布于 2025-05-27 03:54:47
发布于 2025-05-27 03:54:47
8500
代码可运行
举报
文章被收录于专栏:HsuHeinrichHsuHeinrich
运行总次数:0
代码可运行

利用热图探索温度变化

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import matplotlib.colors as mc
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from matplotlib.cm import ScalarMappable
import calendar

数据探索

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 本数据只保留了stationid='T0001'
data = pd.read_csv("https://raw.githubusercontent.com/holtzy/The-Python-Graph-Gallery/master/static/data/trentino_temperature.csv")
data.head()
image-20240129172458936
image-20240129172458936

image-20240129172458936

stationid:站点 date:日期 hour:小时 temp:温度

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 转化日期格式
data["date"] = pd.to_datetime(data["date"])

绘制基础热图

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 简单查看20041月的数据:x轴为日期,y轴为小时,颜色为温度

# 构造20041月数据
subset = data[(data["date"].dt.year == 2004) & (data["date"].dt.month == 1)]

# 提取小时、日期、温度
hour = subset["hour"]
day = subset["date"].dt.day
temp = subset["temp"]

temp = temp.values.reshape(24, len(day.unique()), order="F") # 生成温度数组24*31

# 生成x轴和y轴的范围
xgrid = np.arange(day.max() + 1) + 1 # 天从1开始计数
ygrid = np.arange(25) # 小时从0开始
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fig, ax = plt.subplots()
ax.pcolormesh(xgrid, ygrid, temp)

ax.set_frame_on(False) # 删除所有边框
output_9_0
output_9_0

output_9_0

优化生成两年时间的热图

将上述热图扩展为两年,即查看2004-2005年间的温度变化。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 为防止两年间的温度颜色分配不一致,计算出最小和最大温度。便于温度的颜色分配保持一致
MIN_TEMP = data["temp"].min()
MAX_TEMP = data["temp"].max()
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 将上述的单月热图抽象成自定义函数
def single_plot(data, month, year, ax):
    data = data[(data["date"].dt.year == year) & (data["date"].dt.month == month)]

    hour = data["hour"]
    day = data["date"].dt.day
    temp = data["temp"]
    temp = temp.values.reshape(24, len(day.unique()), order="F")
    
    xgrid = np.arange(day.max() + 1) + 1
    ygrid = np.arange(25)
    
    ax.pcolormesh(xgrid, ygrid, temp, cmap="magma", vmin=MIN_TEMP, vmax=MAX_TEMP)
    # 反转y轴
    ax.set_ylim(24, 0)
    # 设置坐标轴的标签、范围
    ax.yaxis.set_ticks([0, 6, 12, 18, 23])
    ax.xaxis.set_ticks([])
    # 删除刻度线(通过设置参数为0实现)
    ax.yaxis.set_tick_params(length=0)
    ax.xaxis.set_tick_params(length=0)
    
    # 移除所有边框
    ax.set_frame_on(False)
    
    # 设置X轴标签
    ax.set_xlabel(calendar.month_abbr[month], fontsize=10)  # 使用月份的缩写
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 循环创建所有的热图

# 初始化布局
fig, axes = plt.subplots(2, 12, figsize=(14, 10), sharey=True)

for i, year in enumerate([2004, 2005]):
    for j, month in enumerate(range(1, 13)):
        single_plot(data, month, year, axes[i, j])

# 调整布局,并预留空间
fig.subplots_adjust(left=0.05, right=0.98, top=0.9, hspace=0.08, wspace=0)
output_14_0
output_14_0

output_14_0

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 增加颜色bar

# 调整空间,为底部的颜色bar腾出空间
fig.subplots_adjust(bottom=0.15)

# 为颜色bar创建新轴
cbar_ax = fig.add_axes([0.3, 0.05, 0.4, 0.025]) #参数:x坐标,y坐标,width,height
norm = mc.Normalize(MIN_TEMP, MAX_TEMP) # 创建最低温度到最高温度的标准器
# 创建颜色bar
cb = fig.colorbar(
    ScalarMappable(norm=norm, cmap="magma"), 
    cax=cbar_ax, # 将新创建的轴传递给cax
    orientation = "horizontal"
)
# 删除刻度线
cb.ax.xaxis.set_tick_params(size=0)

# 设置颜色bar图例
cb.set_label("Temperature", size=12)
fig
output_15_0
output_15_0

output_15_0

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 增加标题等适当信息进行完善

# y轴标题
fig.text(0.5, 0.1, "date", ha="center", va="center", fontsize=14)
fig.text(0.055, 0.92, 'Hour', ha="center", va="center", fontsize=14)

# 添加y轴标签
fig.text(0.01, 0.71, 'Y2004', ha='center', va='center', rotation='vertical')
fig.text(0.01, 0.33, 'Y2005', ha='center', va='center', rotation='vertical')

# 添加子标题
fig.suptitle("Hourly temperatures - Station T0001", fontsize=20, y=0.95)
fig
output_16_0
output_16_0

output_16_0

参考:Heatmap for timeseries with Python and Matplotlib[1]

共勉~

参考资料

[1]

Heatmap for timeseries with Python and Matplotlib: https://python-graph-gallery.com/heatmap-for-timeseries-matplotlib/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-05-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 HsuHeinrich 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
利用连接散点图探索全球的饮用水情况
参考:Multi panel highlighted lineplots with Matplotlib[1]
HsuHeinrich
2025/07/01
360
利用连接散点图探索全球的饮用水情况
利用热图与径向条形图探索公司的塑料废物情况
参考:Heatmap and Radial Barchart with Matplotlib[1]
HsuHeinrich
2025/06/17
550
利用热图与径向条形图探索公司的塑料废物情况
又再肝3天,整理了65个Matplotlib案例,这能不收藏?
Matplotlib 作为 Python 家族当中最为著名的画图工具,基本的操作还是要掌握的,今天就来分享一波
周萝卜
2021/11/08
2.6K0
利用散点图探索宇航员特征与太空任务之间的关系
参考:Custom scatterplot with annotations in Matplotlib[1]
HsuHeinrich
2025/05/13
630
利用散点图探索宇航员特征与太空任务之间的关系
数据可视化 | 双Y轴可视化绘制方法(Python、R两种方法)
最近有很多小伙伴私信我关于双Y轴图的绘制方法? 这里给出Python-matplotlib绘制方法和R-ggplot2的绘制方法
郭好奇同学
2020/12/28
2K0
数据可视化 | 双Y轴可视化绘制方法(Python、R两种方法)
Python-pykrige包-克里金(Kriging)插值计算及可视化绘制
前面两篇推文我们分别介绍了使用Python和R进行IDW(反距离加权法) 插值的计算及结果的可视化过程,详细内容可见如下:
DataCharm
2021/02/22
16.8K0
Python-pykrige包-克里金(Kriging)插值计算及可视化绘制
分布(六)利用python绘制山脊图
山脊图可以同时显示几个组的数值分布情况,并且可以在同一水平下,直观地对比多个分布的变化。
HsuHeinrich
2024/03/19
4850
分布(六)利用python绘制山脊图
数据可视化 | 手撕 Matplotlib 绘图原理(二)
关于箭头和注释风格的更多介绍与示例,可以在 Matplotlib 的画廊gallery[1]中看到,尤其推荐
数据STUDIO
2021/06/24
1.6K1
数据科学 IPython 笔记本 8.12 文本和注解
创建良好的可视化涉及引导读者并使图形讲述故事。在某些情况下,可以以完全可视的方式讲述这个故事,而不需要添加文本,但在其他情况下,需要小的文本提示和标签。也许你将使用的最基本的注释类型是轴标签和标题,但选项超出了这个范围。让我们看看一些数据,以及我们如何可视化和注释它,来有助于传达有趣的信息。 我们首先设置笔记本来绘图并导入我们将使用的函数:
ApacheCN_飞龙
2022/05/07
1.1K0
数据科学 IPython 笔记本 8.12 文本和注解
超全!40000字 Matplotlib 实战
Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。通过 Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。
公众号机器学习与AI生成创作
2020/09/22
8.2K0
超全!40000字 Matplotlib 实战
利用Python绘制全国各省新型冠状病毒疫情变化动态图
题图:Image by enriquelopezgarre from Pixabay
猴哥yuri
2020/02/25
2.6K0
超火动态价格面积图:手把手教你!
近日,公众号推出了一篇名为《超火动态排序图:代码不到40行,手把手教你!》的文章,反向十分强烈。各大公众号进行的了转载,知乎也是有400+的点赞。
量化投资与机器学习微信公众号
2019/12/17
7980
超火动态价格面积图:手把手教你!
趋势(一)利用python绘制折线图
折线图用于在连续间隔或时间跨度上显示定量数值,最常用来显示趋势和关系(与其他折线组合起来)。折线图既能直观地显示数量随时间的变化趋势,也能展示两个变量的关系。
HsuHeinrich
2024/11/23
3850
趋势(一)利用python绘制折线图
利用小提琴图探索帕尔默企鹅数据
众所周知,可视化好不好看,全凭注释是否精(花)准(哨)。接下来就是最考验技术的地方了!
HsuHeinrich
2025/04/23
780
利用小提琴图探索帕尔默企鹅数据
比特币一年翻 6 倍?看我用 Python 动态可视化比特币价格变动趋势
最近几年,比特币一直站在风口浪尖,一度被追捧为最佳的投资产品,拥护者认为这种加密货币是一种类似于黄金的储值工具,可以对冲通胀和美元疲软
AirPython
2021/03/26
8160
比特币一年翻 6 倍?看我用 Python 动态可视化比特币价格变动趋势
[007] 这份关于Python可视化的秘笈请收好!
“作者总结了用Python进行EDA可视化的常用demo,同时也有一个案例带着我们走了一遍,代码可以复用,涉及了常见的图表,包括折线图、条形图、柱状图、堆积图、饼图等,可以简单阅读,然后收藏起来备用哦!
Sam Gor
2020/11/23
3610
[007] 这份关于Python可视化的秘笈请收好!
Matplotlib数据关系型图表(3)
层次关系型图表主要表示数据个体之间的层次关系,主要包括包含和从属两类。比如公司不同部门的组织结构,不同洲的国家包含关系等,包括热力图(含相关系数图)、节点链接图、树形图、冰柱图、旭日图等。
python数据可视化之路
2023/02/23
1.1K0
Matplotlib数据关系型图表(3)
python 时间序列预测 —— prophet
prophet 是facebook 开源的一款时间序列预测工具包,直接用 conda 安装 fbprophet 即可
全栈程序员站长
2022/06/25
2.6K0
python 时间序列预测 —— prophet
干货:12个案例教你用Python玩转数据可视化(建议收藏)
导读:相比于科学,数据分析更像是一门艺术。创建样式优美的数据可视化是这个艺术中不可缺少的部分。然而,某些人认为优美的,也会有人觉得难以接受。和艺术类似,随着数据分析的快速演变,人们的观念和品味也一直在变化。但是总的来说没有人是绝对正确和错误的。
IT阅读排行榜
2019/04/25
3.9K0
干货:12个案例教你用Python玩转数据可视化(建议收藏)
SCI论文配色-matplotlib分类柱状图绘制
今天在查看资料时,看见一篇SCI论文的配图十分抢眼,图表的整体绘制不是很难,但整个配色还是瞬间让图表“高大上”起来,如下:
DataCharm
2021/02/22
7K0
SCI论文配色-matplotlib分类柱状图绘制
推荐阅读
相关推荐
利用连接散点图探索全球的饮用水情况
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验