Closed duganlx closed 3 months ago
“自定义 mini 图”展示柱状图时,如果值都为正数时,图展示异常,我使用antv官网图表实例举例,具体如下图所示。看着有点像是倒过来了(本来应该向上长的,结果是向下长)。
复现很简单,打开 antv s2 文档 的 "自定义mini图",然后将显示柱状图的数据改为全是正数即可。参考代码如下,一个是 JavaScript 一个是 Data
/* eslint-disable max-lines-per-function */ import { PivotSheet, DataCell, drawCustomContent, S2DataConfig, S2Options, } from '@antv/s2'; /** * 自定义 DataCell,使用 drawCustomContent 绘制简易的 mini 图 * 查看更多方法 https://github.com/antvis/S2/blob/next/packages/s2-core/src/cell/data-cell.ts */ class CustomDataCell extends DataCell { // 当数值为对象时,完全接管绘制, 使用内置的 `drawCustomContent` 根据不同的数据结构 (见下方) 绘制不同的图形 drawTextShape() { if (this.isMultiData()) { return drawCustomContent(this); } super.drawTextShape(); } } fetch( 'https://gw.alipayobjects.com/os/bmw-prod/cd9814d0-6dfa-42a6-8455-5a6bd0ff93ca.json', ) .then((res) => res.json()) .then((res) => { const container = document.getElementById('container')!; const s2DataConfig: S2DataConfig = { fields: { rows: ['province', 'city'], columns: ['type', 'sub_type'], values: ['number'], }, meta: res.meta, data: [ // 用于绘制 mini 图的数据, 数据结构请查阅: https://s2.antv.antgroup.com/manual/basic/analysis/strategy#%E9%85%8D%E7%BD%AE-mini-%E5%9B%BE { province: '海南省', city: '三亚市', type: '家具', sub_type: '桌子', number: { // 折线图 values: { type: 'line', data: [ { year: '2017', value: -368, }, { year: '2018', value: 368, }, { year: '2019', value: 368, }, { year: '2020', value: 368, }, { year: '2021', value: 268, }, { year: '2022', value: 168, }, ], encode: { x: 'year', y: 'value' }, }, }, }, { province: '海南省', city: '三亚市', type: '家具', sub_type: '沙发', number: { // 柱状图 values: { type: 'bar', data: [ { year: '2017', value: 368, }, { year: '2018', value: 328, }, { year: '2019', value: 38, }, { year: '2020', value: 168, }, { year: '2021', value: 268, }, { year: '2022', value: 368, }, ], encode: { x: 'year', y: 'value' }, }, }, }, { province: '海南省', city: '三亚市', type: '办公用品', sub_type: '笔', number: { // 多列文本 values: [ [3877, -4324, '42%'], [3877, 4324, '-42%'], ], }, }, { province: '海南省', city: '三亚市', type: '办公用品', sub_type: '纸张', number: { // 子弹图 values: { measure: 0.3, target: 0.76, }, }, }, ...res.data, ], }; const s2Options: S2Options = { width: 1000, height: 680, style: { dataCell: { height: 40, }, }, conditions: { text: [ { field: 'number', mapping: (value, cellInfo) => { const { meta, colIndex } = cellInfo || {}; if (colIndex === 0 || !value || !meta?.fieldValue) { return { fill: '#000', }; } return { fill: value > 0 ? '#FF4D4F' : '#29A294', }; }, }, ], }, dataCell: (viewMeta, spreadsheet) => { return new CustomDataCell(viewMeta, spreadsheet); }, }; const s2 = new PivotSheet(container, s2DataConfig, s2Options); s2.render(); });
{ "meta": [ { "field": "number", "name": "数量" }, { "field": "province", "name": "省份" }, { "field": "city", "name": "城市" }, { "field": "type", "name": "类别" }, { "field": "sub_type", "name": "子类别" } ], "data": [ { "number": 7789, "province": "浙江省", "city": "杭州市", "type": "家具", "sub_type": "桌子" }, { "number": 2367, "province": "浙江省", "city": "绍兴市", "type": "家具", "sub_type": "桌子" }, { "number": 3877, "province": "浙江省", "city": "宁波市", "type": "家具", "sub_type": "桌子" }, { "number": 4342, "province": "浙江省", "city": "舟山市", "type": "家具", "sub_type": "桌子" }, { "number": 5343, "province": "浙江省", "city": "杭州市", "type": "家具", "sub_type": "沙发" }, { "number": 632, "province": "浙江省", "city": "绍兴市", "type": "家具", "sub_type": "沙发" }, { "number": 7234, "province": "浙江省", "city": "宁波市", "type": "家具", "sub_type": "沙发" }, { "number": 834, "province": "浙江省", "city": "舟山市", "type": "家具", "sub_type": "沙发" }, { "number": 945, "province": "浙江省", "city": "杭州市", "type": "办公用品", "sub_type": "笔" }, { "number": 1304, "province": "浙江省", "city": "绍兴市", "type": "办公用品", "sub_type": "笔" }, { "number": 1145, "province": "浙江省", "city": "宁波市", "type": "办公用品", "sub_type": "笔" }, { "number": 1432, "province": "浙江省", "city": "舟山市", "type": "办公用品", "sub_type": "笔" }, { "number": 1343, "province": "浙江省", "city": "杭州市", "type": "办公用品", "sub_type": "纸张" }, { "number": 1354, "province": "浙江省", "city": "绍兴市", "type": "办公用品", "sub_type": "纸张" }, { "number": 1523, "province": "浙江省", "city": "宁波市", "type": "办公用品", "sub_type": "纸张" }, { "number": 1634, "province": "浙江省", "city": "舟山市", "type": "办公用品", "sub_type": "纸张" }, { "number": 1723, "province": "四川省", "city": "成都市", "type": "家具", "sub_type": "桌子" }, { "number": 1822, "province": "四川省", "city": "绵阳市", "type": "家具", "sub_type": "桌子" }, { "number": 1943, "province": "四川省", "city": "南充市", "type": "家具", "sub_type": "桌子" }, { "number": 2330, "province": "四川省", "city": "乐山市", "type": "家具", "sub_type": "桌子" }, { "number": 2451, "province": "四川省", "city": "成都市", "type": "家具", "sub_type": "沙发" }, { "number": 2244, "province": "四川省", "city": "绵阳市", "type": "家具", "sub_type": "沙发" }, { "number": 2333, "province": "四川省", "city": "南充市", "type": "家具", "sub_type": "沙发" }, { "number": 2445, "province": "四川省", "city": "乐山市", "type": "家具", "sub_type": "沙发" }, { "number": 2335, "province": "四川省", "city": "成都市", "type": "办公用品", "sub_type": "笔" }, { "number": 245, "province": "四川省", "city": "绵阳市", "type": "办公用品", "sub_type": "笔" }, { "number": 2457, "province": "四川省", "city": "南充市", "type": "办公用品", "sub_type": "笔" }, { "number": 2458, "province": "四川省", "city": "乐山市", "type": "办公用品", "sub_type": "笔" }, { "number": 4004, "province": "四川省", "city": "成都市", "type": "办公用品", "sub_type": "纸张" }, { "number": 3077, "province": "四川省", "city": "绵阳市", "type": "办公用品", "sub_type": "纸张" }, { "number": 3551, "province": "四川省", "city": "南充市", "type": "办公用品", "sub_type": "纸张" }, { "number": 352, "province": "四川省", "city": "乐山市", "type": "办公用品", "sub_type": "纸张" } ], "totalData": [ { "number": 26193, "type": "家具", "sub_type": "桌子" }, { "number": 49709, "type": "家具" }, { "number": 23516, "type": "家具", "sub_type": "沙发" }, { "number": 29159, "type": "办公用品" }, { "number": 12321, "type": "办公用品", "sub_type": "笔" }, { "number": 16838, "type": "办公用品", "sub_type": "纸张" }, { "number": 18375, "province": "浙江省", "type": "家具", "sub_type": "桌子" }, { "number": 14043, "province": "浙江省", "type": "家具", "sub_type": "沙发" }, { "number": 4826, "province": "浙江省", "type": "办公用品", "sub_type": "笔" }, { "number": 5854, "province": "浙江省", "type": "办公用品", "sub_type": "纸张" }, { "number": 7818, "province": "四川省", "type": "家具", "sub_type": "桌子" }, { "number": 9473, "province": "四川省", "type": "家具", "sub_type": "沙发" }, { "number": 7495, "province": "四川省", "type": "办公用品", "sub_type": "笔" }, { "number": 10984, "province": "四川省", "type": "办公用品", "sub_type": "纸张" }, { "number": 13132, "province": "浙江省", "city": "杭州市", "type": "家具" }, { "number": 2288, "province": "浙江省", "city": "杭州市", "type": "办公用品" }, { "number": 15420, "province": "浙江省", "city": "杭州市" }, { "number": 2999, "province": "浙江省", "city": "绍兴市", "type": "家具" }, { "number": 2658, "province": "浙江省", "city": "绍兴市", "type": "办公用品" }, { "number": 5657, "province": "浙江省", "city": "绍兴市" }, { "number": 11111, "province": "浙江省", "city": "宁波市", "type": "家具" }, { "number": 2668, "province": "浙江省", "city": "宁波市", "type": "办公用品" }, { "number": 13779, "province": "浙江省", "city": "宁波市" }, { "number": 5176, "province": "浙江省", "city": "舟山市", "type": "家具" }, { "number": 3066, "province": "浙江省", "city": "舟山市", "type": "办公用品" }, { "number": 8242, "province": "浙江省", "city": "舟山市" }, { "number": 4174, "province": "四川省", "city": "成都市", "type": "家具" }, { "number": 6339, "province": "四川省", "city": "成都市", "type": "办公用品" }, { "number": 10513, "province": "四川省", "city": "成都市" }, { "number": 4066, "province": "四川省", "city": "绵阳市", "type": "家具" }, { "number": 3322, "province": "四川省", "city": "绵阳市", "type": "办公用品" }, { "number": 7388, "province": "四川省", "city": "绵阳市" }, { "number": 4276, "province": "四川省", "city": "南充市", "type": "家具" }, { "number": 6008, "province": "四川省", "city": "南充市", "type": "办公用品" }, { "number": 10284, "province": "四川省", "city": "南充市" }, { "number": 4775, "province": "四川省", "city": "乐山市", "type": "家具" }, { "number": 2810, "province": "四川省", "city": "乐山市", "type": "办公用品" }, { "number": 7585, "province": "四川省", "city": "乐山市" }, { "number": 32418, "province": "浙江省", "type": "家具" }, { "number": 10680, "province": "浙江省", "type": "办公用品" }, { "number": 43098, "province": "浙江省" }, { "number": 17291, "province": "四川省", "type": "家具" }, { "number": 18479, "province": "四川省", "type": "办公用品" }, { "number": 35770, "province": "四川省" }, { "number": 78868 } ] }
无
当数全为正时,应该是零轴在底部,柱子向上“伸长”的图
当前的行为就是 数全为正时,零轴在底部,而柱子是向下“伸长”的图(类似于数字全为负数的情况,但又不完全一样,因为如果数字全为负数,零轴应该在顶部)
:tada: This issue has been resolved in version @antv/s2-v2.0.0-next.26 :tada:
The release is available on:
Your semantic-release bot :package::rocket:
🏷 Version
Sheet Type
🖋 Description
“自定义 mini 图”展示柱状图时,如果值都为正数时,图展示异常,我使用antv官网图表实例举例,具体如下图所示。看着有点像是倒过来了(本来应该向上长的,结果是向下长)。
⌨️ Code Snapshots
复现很简单,打开 antv s2 文档 的 "自定义mini图",然后将显示柱状图的数据改为全是正数即可。参考代码如下,一个是 JavaScript 一个是 Data
JavaScript
Data
🔗 Reproduce Link
无
🤔 Steps to Reproduce
😊 Expected Behavior
当数全为正时,应该是零轴在底部,柱子向上“伸长”的图
😅 Current Behavior
当前的行为就是 数全为正时,零轴在底部,而柱子是向下“伸长”的图(类似于数字全为负数的情况,但又不完全一样,因为如果数字全为负数,零轴应该在顶部)
💻 System information