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

如何按月份绘制Calendar Heatmap?求助工具使用问题

按月拆分的日历热力图实现方案

数据预处理(解决July包转换错误)

July包对日期格式要求严格,先确保日期列是标准datetime64类型,清理缺失值:

import pandas as pd

# 替换为你的数据读取方式,日期列名、值列名按需修改
df = pd.read_csv('sales_data.csv')
df['sale_date'] = pd.to_datetime(df['sale_date'], errors='coerce')
df = df.dropna(subset=['sale_date'])
df['month'] = df['sale_date'].dt.to_period('M')  # 生成月份分组标识

用July包生成单月热力图(循环批量生成)

预处理后,按月份拆分数据,补全当月所有日期(避免无销售日期缺失导致的绘制错误):

from july import heatmap
import matplotlib.pyplot as plt

months = df['month'].unique()

for month in months:
    # 筛选当月数据,按天聚合销售值
    month_df = df[df['month'] == month].groupby('sale_date')['sales'].sum().reset_index()
    # 生成当月完整日期序列
    full_dates = pd.date_range(start=month.start_time, end=month.end_time, freq='D')
    # 合并数据,无销售日期填充0
    full_month_df = pd.DataFrame({'date': full_dates}).merge(month_df, on='date', how='left').fillna(0)
    
    # 绘制热力图
    plt.figure(figsize=(7, 3.5))
    heatmap(full_month_df['date'], full_month_df['sales'], 
            title=f'Sales Heatmap - {month.strftime("%Y-%m")}',
            cmap='YlGnBu', colorbar=True)
    plt.show()

替代方案:用calplot实现多月份子图布局

如果calplot默认的年视图不符合需求,可通过子图批量绘制各月份热力图:

import calplot
import matplotlib.pyplot as plt

# 按月份生成按天聚合的时间序列
month_series = []
for month in months:
    ts = df[df['month'] == month].set_index('sale_date')['sales'].resample('D').sum().fillna(0)
    month_series.append(ts)

# 布局子图(示例:每行3个)
n_cols = 3
n_rows = (len(months) + n_cols - 1) // n_cols
fig, axes = plt.subplots(n_rows, n_cols, figsize=(16, 6*n_rows))
axes = axes.flatten()

# 逐个绘制
for idx, (ts, month) in enumerate(zip(month_series, months)):
    calplot.calplot(ts, ax=axes[idx], cmap='YlOrRd', yearlabel_kws={'fontsize':11})
    axes[idx].set_title(f'{month.strftime("%Y-%m")}', fontsize=13)

# 隐藏未使用的子图
for j in range(idx+1, len(axes)):
    axes[j].axis('off')

plt.tight_layout()
plt.show()

错误排查要点

  • July包报错:检查日期列是否无重复、无缺失,且为连续的datetime类型;
  • calplot子图异常:确保每个月份的时间序列是按天聚合的单值数据;
  • 销售值异常:若单日多条记录,必须先按日期求和,避免热力图值重复计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 20:58:15