You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python循环在Quarto RevealJS幻灯片每页生成单个Plotly图?

问题描述

使用Quarto搭配RevealJS输出格式制作含多张图表的幻灯片时,通过Python循环调用Plotly生成图表后,所有图表垂直堆叠在同一张幻灯片中,无法适配幻灯片尺寸,希望实现每页展示单个图表,以下是问题复现代码及效果截图:

复现代码

---
title: "循环生成幻灯片图表"
format: 
    revealjs:
      theme: default
jupyter: ds
code-fold: true
execute: 
  echo: false
  freeze: auto
---

```{python}
#| include: false
# 导入依赖库
from sklearn import datasets
import pandas as pd
import plotly.express as px
#| include: false
# 加载数据集
iris = datasets.load_iris()
df = pd.DataFrame(iris['data'], columns=iris['feature_names'])
df['target'] = iris['target']

按物种生成散点图

for target in df['target'].unique():
  fig = px.scatter(df, x='petal length (cm)', y='sepal length (cm)')
  fig.show()
## 问题效果截图
![图表垂直堆叠且无法适配格式](https://i.sstatic.net/FhXWB.png)

---

# 解决方案
完全可以实现每页单个图表的效果,核心是利用Quarto的`output: asis`选项让代码输出的Markdown内容被解析,同时在循环中插入RevealJS的幻灯片分隔符`---`,并调整图表尺寸适配幻灯片:

## 修改后的代码示例
```yaml
---
title: "循环生成单页图表幻灯片"
format: 
    revealjs:
      theme: default
jupyter: ds
code-fold: true
execute: 
  echo: false
  freeze: auto
---

```{python}
#| include: false
from sklearn import datasets
import pandas as pd
import plotly.express as px
#| include: false
iris = datasets.load_iris()
df = pd.DataFrame(iris['data'], columns=iris['feature_names'])
df['target'] = iris['target']
按物种展示散点图
#| output: asis
# 获取物种名称映射,让图表标题更清晰
target_names = iris['target_names']

for target in df['target'].unique():
    # 生成适配幻灯片尺寸的图表,同时筛选当前物种数据
    fig = px.scatter(
        df[df['target'] == target],
        x='petal length (cm)', 
        y='sepal length (cm)',
        title=f"物种:{target_names[target]}",
        width=900,  # 调整宽度适配幻灯片
        height=600  # 调整高度适配幻灯片
    )
    # 渲染图表
    fig.show()
    # 打印幻灯片分隔符,生成新的一页
    print("\n---\n")
## 关键说明
- `#| output: asis`:告诉Quarto将代码块的输出(包括打印的Markdown文本)直接解析为文档内容,而非普通文本。
- 幻灯片分隔符`---`:每次循环结束后打印该标记,RevealJS会自动识别为新幻灯片的起始点。
- 图表尺寸调整:通过`width`和`height`参数设置Plotly图表大小,让图表填满幻灯片区域,解决尺寸适配问题。
- 数据筛选:补充了物种数据筛选逻辑,让每个图表仅展示对应物种的散点,更贴合场景需求(无需可移除)。

内容的提问来源于stack exchange,提问作者sarath
相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 08:45:29