import { PALETTE, FONT, titleStyle, footnote, watermarks, } from '../theme.js'; /** * 泡泡玛特利润流向桑基图(2026H1) * 从营业收入到非GAAP归母净利润的完整流程 */ export function sankeyChart(rows, { width, height }) { // 从 CSV 构建桑基图的 links 数据 const links = rows.map(row => ({ source: row.source, target: row.target, value: row.value, })); // 定义节点颜色 const nodeColors = { '营业收入': PALETTE.navy, '营业成本': PALETTE.grey, '毛利': PALETTE.sage, '销售费用': PALETTE.orange, '管理费用': PALETTE.purple, '财务费用': PALETTE.brown, '营业利润': PALETTE.green, '投资收益': PALETTE.blue, '公允价值变动': PALETTE.blue, '其他收入': PALETTE.blue, '利润总额': PALETTE.sage, '所得税费用': PALETTE.grey, '净利润': PALETTE.green, '少数股东损益': PALETTE.grey, '归母净利润': PALETTE.coral, '非GAAP调整项': PALETTE.blue, '非GAAP归母净利润': PALETTE.red, }; return { backgroundColor: '#fff', title: { ...titleStyle, text: '泡泡玛特利润流向分析(2026H1)', subtext: '从营业收入到非GAAP归母净利润的完整流程,单位:亿元', top: 18, }, tooltip: { trigger: 'item', triggerOn: 'mousemove', textStyle: { fontFamily: FONT, fontSize: 13 }, formatter: (params) => { if (params.dataType === 'edge') { return `${params.data.source} → ${params.data.target}
${params.data.value.toFixed(2)} 亿元`; } else { return `${params.name}
总额: ${params.value.toFixed(2)} 亿元`; } }, }, series: [ { type: 'sankey', layout: 'none', emphasis: { focus: 'adjacency', }, nodeAlign: 'left', layoutIterations: 0, nodeWidth: 26, nodeGap: 14, left: 120, right: 180, top: 110, bottom: 90, data: Object.keys(nodeColors).map(name => ({ name, itemStyle: { color: nodeColors[name] }, })), links, label: { color: PALETTE.ink, fontFamily: FONT, fontSize: 12, fontWeight: 'normal', formatter: (params) => { // 给每个节点标注名称和数值 return `{name|${params.name}}\n{value|${params.value.toFixed(2)}亿}`; }, rich: { name: { fontSize: 12, fontFamily: FONT, color: PALETTE.ink, }, value: { fontSize: 11, fontFamily: FONT, color: PALETTE.grey, fontWeight: 'bold', }, }, }, lineStyle: { color: 'gradient', curveness: 0.5, opacity: 0.3, }, levels: [ { depth: 0, label: { position: 'left' }, }, { depth: 1, label: { position: 'right' }, }, { depth: 2, label: { position: 'right' }, }, { depth: 3, label: { position: 'right' }, }, { depth: 4, label: { position: 'right' }, }, { depth: 5, label: { position: 'right' }, }, ], }, ], graphic: [ ...watermarks(width, height), footnote('数据来源:泡泡玛特财报 | @思考的Joey'), ], }; }