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

如何在Quarto中用Python并排渲染Pandas DataFrame与Matplotlib图表?

解决Quarto中Python图表与DataFrame表格顶部对齐问题

针对你遇到的Quarto PDF输出里Matplotlib图表和Pandas DataFrame并排时顶部不对齐的问题,核心原因是Matplotlib图表默认带有额外空白边距,且Pandas表格的LaTeX渲染也有默认排版偏移,直接用layout-valign无法覆盖这些输出内容的固有属性,这里提供两种可行的解决方法:

方法一:调整图表边距+单元格输出控制

通过给Matplotlib图表设置紧凑布局,同时给代码块添加Quarto单元格选项消除额外空白,配合布局属性实现对齐:

---
title: "Column Test"
format: pdf
---

::: {layout="[1,1]" layout-valign="top"}
:::: {#first-column}
```{python}
#| echo: false
#| fig-margin: false
import pandas as pd
import datetime as dt
import warnings
import matplotlib.pyplot as plt
warnings.filterwarnings('ignore')

dates = [dt.date.today() + dt.timedelta(days=n) for n in range(100)]
values = range(100)
df = pd.DataFrame({'date':dates, 'values':values})

# 设置图表紧凑布局,消除额外边距
fig, ax = plt.subplots()
df.set_index('date').plot(ax=ax)
plt.tight_layout(pad=0)

::::
:::: {#second-column}

#| echo: false
#| output-latex-options: ["position=H"]
import pandas as pd
df = pd.DataFrame([[1,2,3],[4,5,6],[7,8,9],[1,2,3],[4,5,6],[7,8,9],
                [1,2,3],[4,5,6],[7,8,9],[1,2,3],[4,5,6],[7,8,9]], columns=['a','b','c'])
df

::::
:::

关键调整点:
- 给图表代码块加`fig-margin: false`,关闭Quarto默认给图表添加的边距
- 使用`plt.tight_layout(pad=0)`压缩Matplotlib图表的内部空白
- 给表格代码块加`output-latex-options: ["position=H"]`,强制表格在当前位置渲染,避免LaTeX自动调整位置导致偏移

## 方法二:直接使用LaTeX minipage(PDF专属)
因为Quarto的PDF输出基于LaTeX,直接用LaTeX的minipage环境可以更精准控制排版:

```markdown
---
title: "Column Test"
format: pdf
---

\begin{minipage}[t]{0.48\textwidth}
```{python}
#| echo: false
import pandas as pd
import datetime as dt
import warnings
import matplotlib.pyplot as plt
warnings.filterwarnings('ignore')

dates = [dt.date.today() + dt.timedelta(days=n) for n in range(100)]
values = range(100)
df = pd.DataFrame({'date':dates, 'values':values})

fig, ax = plt.subplots()
df.set_index('date').plot(ax=ax)
plt.tight_layout(pad=0)
plt.subplots_adjust(top=1, bottom=0) # 进一步调整上下边距

\end{minipage}
\hfill
\begin{minipage}[t]{0.48\textwidth}

#| echo: false
import pandas as pd
df = pd.DataFrame([[1,2,3],[4,5,6],[7,8,9],[1,2,3],[4,5,6],[7,8,9],
                [1,2,3],[4,5,6],[7,8,9],[1,2,3],[4,5,6],[7,8,9]], columns=['a','b','c'])
df

\end{minipage}

这种方式通过LaTeX的`[t]`参数强制两个minipage顶部对齐,同时用`\hfill`填充中间空白,配合图表的边距调整,能实现更精准的对齐效果。

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

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

最近更新时间:2026.07.20 16:42:39