Seaborn FacetGrid多页pdf绘图



我正试图使用FacetGrid创建一个多页pdf(https://seaborn.pydata.org/examples/many_facets.html)。有20个网格图像,我想把前10个网格保存在pdf文件的第一页,把第二个10个网格存到pdf文件的第二页。我有了创建多页pdf文件的想法(将巨大的海鸟图导出为多页pdf(。这个例子适用于sns.catplot((,但在我的例子中(sns.FacetGrid(,输出的pdf文件有两个页面,每个页面都有全部20个网格,而不是在每个页面中划分10个网格。

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# Create a dataset with many short random walks
rs = np.random.RandomState(4)
pos = rs.randint(-1, 2, (20, 5)).cumsum(axis=1)
pos -= pos[:, 0, np.newaxis]
step = np.tile(range(5), 20)
walk = np.repeat(range(20), 5)
df = pd.DataFrame(np.c_[pos.flat, step, walk],
columns=["position", "step", "walk"])
# plotting FacetGrid
def grouper(iterable, n, fillvalue=None):
from itertools import zip_longest
args = [iter(iterable)] * n
return zip_longest(*args, fillvalue=fillvalue)
from matplotlib.backends.backend_pdf import PdfPages
with PdfPages("output.pdf") as pdf:
N_plots_per_page = 10

for cols in grouper(df["walk"].unique(), N_plots_per_page):

# Initialize a grid of plots with an Axes for each walk
grid = sns.FacetGrid(df, col="walk", hue="walk", palette="tab20c",
col_wrap=2, height=1.5)

# Draw a horizontal line to show the starting point
grid.map(plt.axhline, y=0, ls=":", c=".5")

# Draw a line plot to show the trajectory of each random walk
grid.map(plt.plot, "step", "position", marker="o")

# Adjust the tick positions and labels
grid.set(xticks=np.arange(5), yticks=[-3, 3],
xlim=(-.5, 4.5), ylim=(-3.5, 3.5))

# Adjust the arrangement of the plots
grid.fig.tight_layout(w_pad=1)
pdf.savefig()

您缺少grid = sns.FacetGrid(...)调用的col_order=cols参数。

最新更新