VISALL 正负双指标求和条形图 (Positive and Negative Double Indicator Sum Bar) 使用文档
简介
正负双指标求和条形图是VISALL数据可视化库中的特色图表类型,用于同时展示两个相关指标及其总和的水平条形图。该图表特别适合展示正负对比数据,例如收入与支出、利润与亏损等场景,能够直观地展示两个指标的相对大小及其总体影响。
基本用法
import { render } from 'path/to/bundle.esm.min.js';
// 创建正负双指标求和条形图
const chart = render(container, {
layers: [
{
type: 'positiveAndNegativeDoubleIndicatorSumBar',
dataIndex: 0,
encoding: {
x: '部门', // 分类字段名
y: '收入', // 第一个指标(正值)
y2: '支出' // 第二个指标(会被转为负值展示)
}
}
],
data: [
{
values: [
{ 部门: '销售部', 收入: 1200, 支出: 800 },
{ 部门: '研发部', 收入: 900, 支出: 1100 },
{ 部门: '市场部', 收入: 700, 支出: 500 },
// ...更多数据
]
}
]
});
配置参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| encoding.x | string | - | 分类字段映射,必须提供一个字符串或日期类型字段 |
| encoding.y | string | - | 第一个指标字段(正值展示),必须是数值类型 |
| encoding.y2 | string | - | 第二个指标字段(会被转为负值展示),必须是数值类型 |
| dataIndex | number | 0 | 指定使用的数据集索引 |
数据要求
- x字段要求为字符串或日期类型,用于分类
- y和y2字段要求为数值类型
- 数据量建议不少于2条才能体现对比效果
- 提供准确的字段名映射
数据处理机制
本图表对原始数据进行了特殊处理:
- y字段数据保持原值(通常为正值)
- y2字段数据会被自动转为负值(通过
-dataItem[y2]计算) - 同时计算两个指标的总和值(
+dataItem[y] + -dataItem[y2])
渲染规则
-
三个系列:
- 第一个系列显示总和值(y + (-y2))
- 第二个系列显示y值(堆叠展示)
- 第三个系列显示-y2值(堆叠展示)
-
标签显示:
- 当条形宽度足够时(barWidth >= 15px),自动显示数值标签
- 正值在左侧显示,负值在右侧显示
-
滚动条:
- 当数据量较大导致条形宽度不足时,自动显示垂直滚动条
- 默认显示最后的8个数据点
潜规则与注意事项
-
自适应条形宽度:
- 条形宽度计算公式:
(容器高度 - 边距) / 数据点数 / 2 - 存在最大宽度限制:
util.const.BAR_MAX_WIDTH
- 条形宽度计算公式:
-
单位显示规则:
- 自动读取并显示字段单位信息
- 单位会显示在坐标轴名称和数值标签中
- 单位通过
dataMetaInfo[字段名].unit获取
-
标签智能显示:
- 只有当条形宽度足够大时(barWidth >= 15px)才会显示标签
- 标签位置会根据值的正负自动调整
-
垂直滚动机制:
- 当条形宽度过小时,自动启用垂直滚动
- 滚动条样式会根据主题自动调整
-
坐标轴反转:
- 本图表是水平条形图,x轴对应y轴位置,y/y2对应x轴位置
- x轴字段名会显示在y轴左侧
实现原理
正负双指标求和条形图内部实现主要包括以下几个步骤:
- 数据预处理:对x字段数据进行去重和排序
- 布局计算:根据容器尺寸计算条形宽度和滚动条显示逻辑
- 数据转换:将y2数据转换为负值,计算总和值
- 渲染配置:根据数据特性配置三个系列的显示规则
使用场景示例
财务收支分析
{
type: 'positiveAndNegativeDoubleIndicatorSumBar',
encoding: {
x: '月份',
y: '收入',
y2: '支出'
}
}
业务盈亏对比
{
type: 'positiveAndNegativeDoubleIndicatorSumBar',
encoding: {
x: '产品线',
y: '利润',
y2: '亏损'
}
}
人口增减变化
{
type: 'positiveAndNegativeDoubleIndicatorSumBar',
encoding: {
x: '年份',
y: '出生人口',
y2: '死亡人口'
}
}
常见问题解决
-
条形图显示不全
- 检查容器高度是否足够
- 数据量过大时会自动启用滚动条
-
负值显示问题
- y2字段数据会自动转为负值,原始数据应为正值
- 如需手动控制正负,可以交换y和y2的字段映射
-
标签显示不全
- 当容器高度不足时,标签可能会被隐藏
- 可以通过增加容器高度或减少数据点数量来解决
-
数据排序问题
- x轴数据默认按升序排列
- 如需特定排序,建议在数据预处理阶段完成