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

如何在热力图数据空缺处添加交叉影线及解决xlsx读取报错

问题修复方案

1. 报错原因及修复

报错Error tokenizing data是因为你使用纯文本解析函数pd.read_csv()读取二进制格式的.xlsx文件,二者格式不兼容导致解析失败。
修复步骤:

  • 先安装xlsx读取依赖:pip install openpyxl
  • 把原代码中的文件读取逻辑替换为Excel专用读取函数

2. 完整可运行代码(适配目标热力图效果)

import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np

months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
# 替换read_csv为read_excel,指定兼容xlsx的引擎
df = pd.read_excel('Events_in_Month_and_Year.xlsx', engine='openpyxl')
# 生成透视表
pivoted = df.pivot_table(index='month', columns='year', aggfunc=len, fill_value=0)
# 补全1975-2018所有年份列,缺失年份默认补0
full_years = range(1975, 2019)
pivoted = pivoted.reindex(columns=full_years, fill_value=0)
# 按指定月份顺序调整行顺序
pivoted = pivoted.loc[months]

# 可替换为你自己的空值标记逻辑,示例为随机生成20个空值模拟数据空缺
for _ in range(20):
    pivoted.iloc[np.random.randint(0, len(pivoted)), np.random.randint(0, len(pivoted.columns))] = np.nan

max_val = 3 # 固定色阶最大值为3,匹配数据取值1/2/3的规则,避免色阶偏移
ax = sns.heatmap(pivoted, 
                 cmap=plt.get_cmap('Greys', max_val + 1), 
                 vmin=-0.5, 
                 vmax=max_val + 0.5,
                 cbar_kws={"ticks": range(0, max_val+1)})
# 空值显示交叉阴影
ax.patch.set_facecolor('white')
ax.patch.set_edgecolor('black')
ax.patch.set_hatch('xxxx')
# 显示色阶边框
spines = ax.collections[0].colorbar.ax.spines
for s in spines:
    spines[s].set_visible(True)
plt.tight_layout()
plt.show()

3. 效果适配说明

  • 新增reindex逻辑补全1975-2018所有年份,避免数据中缺失的年份不在横轴显示
  • 固定色阶范围匹配1/2/3的取值规则,颜色显示更稳定
  • 0值对应浅灰色空白效果,空值位置显示交叉阴影,和目标示例效果一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 08:48:02