Skip to content

Heatmap 热力图

用于展示时间序列数据的热力图组件,适合展示玩家活跃度、游戏数据统计等场景。

基础用法

最基础的热力图用法,展示一年的数据。

12月
1月
2月
3月
4月
5月
6月
7月
8月
9月
10月
11月
vue
<script setup>
import { ref } from 'vue'

const playerActivity = ref([
  { date: '2024-01-01', value: 10 },
  { date: '2024-01-02', value: 25 },
  { date: '2024-01-03', value: 15 },
  // ... 更多数据
])

const handleCellClick = (data, event) => {
  console.log('点击了单元格:', data)
}
</script>

<template>
  <ExHeatmap 
    :data="playerActivity" 
    @cell-click="handleCellClick"
  />
</template>

不同主题

通过 theme 属性可以设置不同的颜色主题。

Neon(霓虹蓝)

12月
1月
2月
3月
4月
5月
6月
7月
8月
9月
10月
11月

Blue(蓝色)

12月
1月
2月
3月
4月
5月
6月
7月
8月
9月
10月
11月

Green(绿色)

12月
1月
2月
3月
4月
5月
6月
7月
8月
9月
10月
11月

Purple(紫色)

12月
1月
2月
3月
4月
5月
6月
7月
8月
9月
10月
11月

Red(红色)

12月
1月
2月
3月
4月
5月
6月
7月
8月
9月
10月
11月
vue
<template>
  <ExHeatmap :data="data" theme="neon" />
  <ExHeatmap :data="data" theme="blue" />
  <ExHeatmap :data="data" theme="green" />
  <ExHeatmap :data="data" theme="purple" />
  <ExHeatmap :data="data" theme="red" />
</template>

不同尺寸

通过 size 属性可以设置热力图的尺寸。

Small

12月
1月
2月
3月
4月
5月
6月
7月
8月
9月
10月
11月

Medium

12月
1月
2月
3月
4月
5月
6月
7月
8月
9月
10月
11月

Large

12月
1月
2月
3月
4月
5月
6月
7月
8月
9月
10月
11月
vue
<template>
  <ExHeatmap :data="data" size="small" />
  <ExHeatmap :data="data" size="medium" />
  <ExHeatmap :data="data" size="large" />
</template>

自定义日期范围

通过 start-dateend-date 属性可以自定义显示的日期范围。

6月
7月
8月
9月
10月
11月
12月
vue
<template>
  <ExHeatmap 
    :data="data" 
    start-date="2024-06-01"
    end-date="2024-12-31"
  />
</template>

隐藏标签

可以通过 show-month-labelsshow-week-labels 属性控制标签的显示。

隐藏月份标签

隐藏星期标签

12月
1月
2月
3月
4月
5月
6月
7月
8月
9月
10月
11月

隐藏所有标签

vue
<template>
  <ExHeatmap :data="data" :show-month-labels="false" />
  <ExHeatmap :data="data" :show-week-labels="false" />
</template>

自定义单元格样式

可以通过 gapradius 属性自定义单元格的间距和圆角。

无间距,圆角

12月
1月
2月
3月
4月
5月
6月
7月
8月
9月
10月
11月

大间距,无圆角

12月
1月
2月
3月
4月
5月
6月
7月
8月
9月
10月
11月
vue
<template>
  <ExHeatmap :data="data" :gap="0" :radius="4" />
  <ExHeatmap :data="data" :gap="6" :radius="0" />
</template>

禁用工具提示

设置 show-tooltipfalse 可以禁用悬停工具提示。

12月
1月
2月
3月
4月
5月
6月
7月
8月
9月
10月
11月
vue
<template>
  <ExHeatmap :data="data" :show-tooltip="false" />
</template>

空数据

当没有数据时,会显示空状态。

12月
1月
2月
3月
4月
5月
6月
7月
8月
9月
10月
11月
空

暂无数据

vue
<template>
  <ExHeatmap :data="[]" />
</template>

自定义空状态

可以通过 empty 插槽自定义空状态。

12月
1月
2月
3月
4月
5月
6月
7月
8月
9月
10月
11月
空

暂无活跃数据

vue
<template>
  <ExHeatmap :data="[]">
    <template #empty>
      <div style="text-align: center; padding: 60px 20px;">
        <img src="..." alt="空" width="64" height="64" />
        <p>暂无活跃数据</p>
      </div>
    </template>
  </ExHeatmap>
</template>

响应式设计

Heatmap 组件完全支持响应式设计,在移动端会自动调整尺寸和间距。

12月
1月
2月
3月
4月
5月
6月
7月
8月
9月
10月
11月

提示

  • 在移动端,热力图会自动缩小单元格尺寸
  • 标签字体会自动调整
  • 支持横向滚动查看完整数据
  • 建议在移动端使用 small 尺寸

使用场景

玩家活跃度统计

玩家活跃度热力图

展示过去一年的玩家登录活跃度

12月
1月
2月
3月
4月
5月
6月
7月
8月
9月
10月
11月

游戏数据统计

游戏对局统计

展示过去半年的游戏对局数量

12月
1月
2月
3月
4月
5月
6月
7月
8月
9月
10月
11月

API

Heatmap Props

属性说明类型默认值
data热力图数据HeatmapDataItem[][]
start-date开始日期(YYYY-MM-DD)string一年前
end-date结束日期(YYYY-MM-DD)string今天
size单元格尺寸'small' | 'medium' | 'large''medium'
theme主题'default' | 'blue' | 'green' | 'purple' | 'red' | 'neon''neon'
show-month-labels是否显示月份标签booleantrue
show-week-labels是否显示星期标签booleantrue
show-tooltip是否显示工具提示booleantrue
gap单元格间距number4
radius单元格圆角number2
max-value最大值(用于计算颜色深度)number自动计算
empty-text空数据文本string'暂无数据'

HeatmapDataItem 数据结构

属性说明类型必填
date日期(YYYY-MM-DD 格式)string
value数值number

Heatmap Events

事件名说明类型
cell-click单元格点击事件(data: HeatmapDataItem, event: MouseEvent) => void
cell-hover单元格悬停事件(data: HeatmapDataItem | null) => void

Heatmap Slots

插槽名说明
empty自定义空状态

Heatmap Methods

方法名说明类型
getElement获取热力图DOM元素() => HTMLDivElement | null
refresh刷新热力图() => void

无障碍支持

  • 每个单元格都有 title 属性,显示日期和数值
  • 支持键盘导航
  • 支持 prefers-reduced-motion 减少动画
  • 支持高对比度模式

注意事项

  1. 数据格式必须为 YYYY-MM-DD 格式
  2. 数据会自动按日期排序和填充
  3. 没有数据的日期会显示为最浅的颜色
  4. 颜色深度根据数值自动计算(0-4 个等级)
  5. 建议数据量不超过一年,以保证性能