Seaborn FacetGrid 多页 pdf 绘图
Seaborn FacetGrid multiple page pdf plotting
我正在尝试使用此 (https://seaborn.pydata.org/examples/many_facets.html). There are 20 grids images and I want to save the first 10 grids in the first page of pdf and the second 10 grids to the second page of pdf file. I got the idea of create mutipage pdf file from this () 中的 FacetGrid 创建多页 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
参数。
我正在尝试使用此 (https://seaborn.pydata.org/examples/many_facets.html). There are 20 grids images and I want to save the first 10 grids in the first page of pdf and the second 10 grids to the second page of pdf file. I got the idea of create mutipage pdf file from this (
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
参数。