You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Matplotlib contourf绘制温度测量相对分布热力图?

解决Matplotlib contourf绘制温度分位分布的问题

核心问题本质

你要绘制日期-分位数-温度的热力分布图,但contourf要求输入规整的二维Z矩阵,而每日样本量不同导致原始数据无法生成符合要求的矩阵,这是图表不符合预期的核心原因。

关键解决步骤

1. 数据预处理:生成规整的分位温度矩阵

对每个日期的温度数据,计算固定数量分位数(比如0%、1%...100%)对应的温度值,确保每个日期输出数量一致,从而构建规整的Z矩阵:

import numpy as np
import pandas as pd

# 假设数据存储在df中,包含'date'(日期)和'temp'(温度)列
unique_dates = df['date'].unique()
# 定义要计算的分位数范围(0%-100%,步长1%)
quantile_points = np.arange(0, 101)
z_matrix = []

for date in unique_dates:
    # 获取当日有效温度数据
    daily_temps = df[df['date'] == date]['temp'].dropna().values
    # 计算该日期各分位数对应的温度值
    temp_percentiles = np.percentile(daily_temps, quantile_points)
    z_matrix.append(temp_percentiles)

# 转换为numpy二维数组,形状为(日期数, 分位数数量)
z_matrix = np.array(z_matrix)

2. 正确映射坐标轴与Z矩阵维度

contourf的输入需满足维度对应关系:

  • X轴:日期数组(长度=日期数),需转换为matplotlib可识别的datetime格式
  • Y轴:分位数数组(长度=分位数数量)
  • Z轴:二维数组,需保证Z的行对应X轴每个点,列对应Y轴每个点,因此需要将z_matrix转置后传入:
import matplotlib.pyplot as plt

# 转换日期为datetime格式,确保坐标轴正确排序
x_axis = pd.to_datetime(unique_dates)
y_axis = quantile_points

# 绘制contourf热力图
plt.figure(figsize=(12, 6))
# 转置z_matrix,让Y轴(分位数)对应Z的列方向
contour_plot = plt.contourf(x_axis, y_axis, z_matrix.T, cmap='coolwarm', levels=20)
plt.colorbar(contour_plot, label='温度 (℃)')

# 调整坐标轴样式
plt.ylabel('分位数 (%)')
plt.xlabel('日期')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

3. 常见错误排查

  • 未做分位转换:直接传入不规则的每日温度数据,导致Z矩阵维度不匹配,图形错乱。
  • 日期未序列化:用字符串日期作为X轴,matplotlib无法正确排序和渲染刻度。
  • Z矩阵维度不对应:未转置Z矩阵,导致X/Y轴与温度值的映射关系颠倒。

内容的提问来源于stack exchange,提问作者Sebastian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 14:30:41