跳到主要内容

VISALL 叠加看板柱状图 (Stack Board Bar Chart) 使用文档

简介

叠加看板柱状图是VISALL数据可视化库中的特色图表类型之一,结合了柱状图和迷你趋势图的特点,能够在柱状图的基础上叠加数据趋势看板,直观展示数据的当前值和历史变化趋势。该组件非常适合用于展示带有时间序列的关键指标数据,特别是需要关注数值变化趋势的场景。

基本用法

import { render } from 'path/to/bundle.esm.min.js';

// 创建叠加看板柱状图
const chart = render(container, {
layers: [
{
type: 'stackBoardBar',
dataIndex: 0,
encoding: {
x: '月份', // X轴字段名(类别)
y: '销售额', // Y轴字段名(数值)
z: '趋势数据' // Z轴字段名(趋势数组)
}
}
],
data: [
{
values: [
{ 月份: '1月', 销售额: 320, 趋势数据: [300, 310, 320, 330, 320] },
{ 月份: '2月', 销售额: 120, 趋势数据: [150, 140, 130, 120, 110] },
{ 月份: '3月', 销售额: 220, 趋势数据: [180, 190, 200, 210, 220] },
// ...更多数据
]
}
]
});

配置参数

参数类型默认值说明
encoding.xstring-X轴映射字段,必须提供一个字符串类型字段作为类别
encoding.ystring-Y轴映射字段,必须是数值类型,表示柱状图的高度
encoding.zstring-Z轴映射字段,必须提供一个包含数值数组的字段,用于展示趋势
dataIndexnumber0指定使用的数据集索引

数据要求

  • X轴字段要求为字符串类型
  • Y轴字段要求为数值类型
  • Z轴字段要求为数值数组,表示历史趋势数据
  • 趋势数据数组至少需要两个点才能展示变化趋势
  • 数据量至少需要大于1条

高级用法

1. 数据排序

叠加看板柱状图默认会对X轴数据进行升序排序,无需手动排序:

// 数据会自动按月份进行排序
{
type: 'stackBoardBar',
encoding: {
x: '月份',
y: '销售额',
z: '趋势数据'
}
}

2. 趋势上升/下降颜色区分

看板中的趋势图会根据趋势的上升或下降自动使用不同的颜色:

  • 上升趋势:绿色 (rgba(11,151,92,1))
  • 下降趋势:红色 (rgba(237,45,0,1))

潜规则与注意事项

  1. 趋势数据判断规则

    • 通过比较趋势数组的第一个值和最后一个值来判断趋势方向
    • 上升趋势:第一个值 > 最后一个值时,使用绿色
    • 下降趋势:第一个值 <= 最后一个值时,使用红色
  2. 看板布局规则

    • 看板高度固定为26px
    • 看板底部与柱状图顶部的间距为6px
    • 趋势图容器高度为9px
    • 看板具有3px的圆角和阴影效果
  3. 边缘情况处理

    • 当趋势数据不存在或只有一个数据点时,将显示一条水平线
    • 当趋势数据最后一个值不存在时,显示"--"作为替代文本
  4. 数据排序机制

    • 图表默认对X轴数据进行升序排序,确保数据展示的一致性
    • 排序通过utils.dataTransform.transform(data, [{ type: 'sort', field: x, order: 'ascending' }])实现

实现原理

叠加看板柱状图内部结合了标准柱状图和自定义图形绘制功能,主要包括以下步骤:

  1. 数据预处理:对原始数据进行排序和转换
  2. 柱状图绘制:使用标准ECharts柱状图作为基础
  3. 看板绘制:使用自定义系列(custom series)绘制趋势看板
  4. 趋势线绘制:根据Z轴数据绘制小型折线图

看板由以下几个部分组成:

  • 背景面板:白色背景,带有阴影和圆角
  • 趋势区域:根据趋势数据绘制的渐变色填充区域
  • 趋势线:根据趋势数据绘制的折线
  • 数值显示:显示当前值(趋势数据的最后一个值)

类型兼容性问题

使用本组件时,需要注意以下类型兼容性问题:

  1. Z轴字段必须是数组类型,否则会导致图表无法正确渲染
  2. 趋势数据数组应包含数值类型的元素
  3. 空值或异常值可能导致趋势线不连续

示例

基础叠加看板柱状图

{
type: 'stackBoardBar',
encoding: {
x: '月份',
y: '销售额',
z: '趋势数据'
}
}

实际应用场景

{
type: 'stackBoardBar',
encoding: {
x: '产品',
y: '当前库存',
z: '历史库存'
}
}

常见问题解决

  1. 看板不显示

    • 检查Z轴字段是否正确配置
    • 确认趋势数据是否为数组类型
  2. 趋势线颜色不符合预期

    • 检查趋势数据的第一个和最后一个值是否符合上升/下降的判定规则
  3. 看板显示"--"

    • 趋势数据的最后一个值可能不存在或为无效值
    • 确保提供完整的趋势数据数组