import { col } from '../csv.js'; import { PALETTE, FONT, axisCommon, standalonePeriodAxis, titleStyle, standardLegend, financialViewLabel, barSeries, footnote, watermarks, LAYOUT, } from '../theme.js'; /** 泡泡玛特分地区零售门店占比:每根柱标准化为各期末全球门店数的 100%。 */ const REGIONS = [ { key: 'china', name: '中国(含港澳台)', color: '#3F7FBE', labelColor: '#fff' }, { key: 'apac', name: '亚太', color: '#36A28F', labelColor: '#fff' }, { key: 'americas', name: '美洲', color: '#E4A349', labelColor: PALETTE.ink }, { key: 'europe', name: '欧洲', color: PALETTE.brown, labelColor: '#fff' }, { key: 'other', name: '其他', color: PALETTE.sand, labelColor: PALETTE.ink }, ]; function sharePoint(value, labelColor) { if (!Number.isFinite(value) || value === 0) return null; return { value, label: value >= 5 ? { position: 'inside', color: labelColor } : { show: false }, }; } export function storesRetailShareChart(rows, { width, height, view = 'all' }) { const periods = col(rows, 'period'); const barWidth = view === 'all' ? 48 : 80; return { backgroundColor: '#fff', title: { ...titleStyle, text: `泡泡玛特分地区零售门店数量占比(${financialViewLabel(view)})`, subtext: '归一化堆叠:每根柱为当期末全球零售门店数的 100%', }, legend: standardLegend(REGIONS.map((item) => item.name), { itemGap: 20 }), tooltip: { trigger: 'axis', axisPointer: { type: 'shadow' }, textStyle: { fontFamily: FONT }, formatter: (params) => { const row = rows[periods.indexOf(params[0].axisValue)]; return `${params[0].axisValue} 全球合计 ${row.global} 家
${params .filter((item) => item.value !== null) .slice() .reverse() .map((item) => `${item.marker}${item.seriesName}: ${item.value.toFixed(1)}%`) .join('
')}`; }, }, grid: { left: 78, right: 42, top: LAYOUT.gridTop, bottom: 100 }, xAxis: { ...standalonePeriodAxis, data: periods }, yAxis: { ...axisCommon, type: 'value', min: 0, max: 100, interval: 20, axisLabel: { ...axisCommon.axisLabel, formatter: '{value}%' }, }, series: REGIONS.map((item) => barSeries({ name: item.name, data: rows.map((row) => sharePoint(row[item.key], item.labelColor)), color: item.color, barWidth, stack: 'stores-retail-share', label: { show: true, position: 'inside', fontSize: 11, fontFamily: FONT, fontWeight: 500, formatter: (point) => `${point.value.toFixed(1)}%`, }, emphasis: { focus: 'series' }, })), graphic: [ ...watermarks(width, height), footnote('数据来源:泡泡玛特历年公告;门店数为各报告期末时点数\n中国=中国内地+港澳台;其他=全球合计−中国−亚太−美洲−欧洲 | @思考的Joey'), ], }; }