所有图表必须使用 python-pptx 原生 Chart 对象创建,数据写入图表内嵌 Excel 工作簿,确保用户在 PowerPoint 中可右键 → 编辑数据。
| 图表类型 | XL_CHART_TYPE | 值 | 使用场景 |
|---|---|---|---|
| 簇状柱形图 | COLUMN_CLUSTERED | 51 | 区域分布对比、团队追踪 |
| 簇状条形图 | BAR_CLUSTERED | 57 | 国家排名、负责人排名、状态漏斗(横向) |
| 折线图(带标记) | LINE_MARKERS | 65 | 多日趋势、30日追踪、7日走势 |
| 环形图 | DOUGHNUT | -4120 | 状态分布、区域占比 |
| 表格 | TABLE | 19 | 明细数据、TOP列表、状态变化 |
| 用途 | 色值 | 说明 |
|---|---|---|
| 系列1主色 | #1E3A5F |
深蓝,主要数据系列(对应 theme primary) |
| 系列2对比 | #ED7D31 |
橙色,对比/参考系列 |
| 系列3辅助 | #64748B |
灰蓝,辅助线或第三系列(对应 theme secondary) |
| 正增长 | #10B981 |
绿色,用于涨幅标记(对应 theme accent) |
| 负增长 | #EF4444 |
红色,用于跌幅标记(对应 theme accentNeg) |
| 警告 | #ED7D31 |
橙色,异常告警 |
注意:上表为默认配色。报告生成时
chart_factory.py接受调用方传入的theme_colors参数,实际颜色由三级解析(用户主题 > 模板主题 > 默认)决定。多系列图表(如环形图/饼图)使用DEFAULT_COLORS色板:#1E3A5F→#10B981→#ED7D31→#64748B→#EF4444。
#333333#D9D9D9,宽度 0.75pt#666666from pptx.chart.data import ChartData
from pptx.enum.chart import XL_CHART_TYPE
chart_data = ChartData()
chart_data.categories = ['亚洲', '非洲', '拉美', '中东', '欧洲']
chart_data.add_series('数值', (2160, 1840, 1743, 878, 247))
chart = slide.shapes.add_chart(
XL_CHART_TYPE.COLUMN_CLUSTERED,
left, top, width, height,
chart_data
).chart
数据自动写入 PPT 内嵌的 Excel 工作簿,用户可在 PowerPoint 中直接编辑。
chart = slide.shapes.add_chart(XL_CHART_TYPE.BAR_CLUSTERED, ...).chart
chart.category_axis.reverse_order = True
chart = slide.shapes.add_chart(XL_CHART_TYPE.DOUGHNUT, ...).chart
chart.plots[0].hole_size = 0.5 # 50% 中心空白
chart = slide.shapes.add_chart(XL_CHART_TYPE.LINE_MARKERS, ...).chart
series = chart.series[0]
series.marker.size = 7
series.marker.style = XL_MARKER_STYLE.CIRCLE
通用构建器支持自动选择图表类型,根据数据特征和页面场景智能推荐。
| 数据特征 | 推荐图表 | 原因 |
|---|---|---|
| 时间序列 + 数值 | LINE_MARKERS | 展示趋势变化 |
| 1个分类列 + 数值列 | BAR_CLUSTERED | 横向对比排名 |
| 1个分类列(含百分比) | DOUGHNUT | 展示占比结构 |
| 多个数值维度 | COLUMN_CLUSTERED | 多维度对比 |
| 需要展示精确数值 | TABLE | 数据明细 |
| 发现数据分层 | FUNNEL | 漏斗转化 |
| 经纬度数据 | 散点图/气泡图 | 地理分布 |
| 检查项 | 问题 | 修复 |
|---|---|---|
| 图表刻度异常 | Y轴从非零开始导致误导 | 重置Y轴最小值 |
| 图表无数据 | 数据系列为空 | 跳过该图表插入 |
| 表格列宽不合理 | 列宽与内容不匹配 | 按内容自适应列宽 |