将每个 seaborn 图形附加到 for 循环内的 PDF

Posted

技术标签:

【中文标题】将每个 seaborn 图形附加到 for 循环内的 PDF【英文标题】:Append each seaborn figure to a PDF inside a for loop 【发布时间】:2020-11-07 20:10:24 【问题描述】:

这是这个问题Link的后续问题

我有以下代码为每个人生成一个数字:

# Import pandas library 
import pandas as pd
import numpy as np
# Data
data = [['tom', 10,1], ['nick', 15,1], ['dom', 14,1], ['tom', 15,2], ['nick', 18,2], ['dom', 15,2], ['tom', 17,3]
       , ['nick', 14,3], ['tom',16 ,4], ['dom', 22,3]] 
  
# Create the pandas DataFrame 
df = pd.DataFrame(data, columns = ['Name', 'Score','Attempt']) 

# print dataframe. 
df.sort_values(by='Score',ascending=False,inplace=True)

#Plot Images
import matplotlib.pyplot as plt
import seaborn as sns
plt.style.use('seaborn')

for name in df['Name'].unique():
    fig, ax = plt.subplots()
    #df = df.sort_values(by='Score',ascending=False).reset_index(drop=True)
    sub = df[df.Name == name]
    sns.barplot(y='Attempt',x='Score',data=sub, orient='h', ax=ax,order=sub['Attempt'])
    ax.set_title(name.capitalize())

这给了我:

问题:

如何添加到循环中以将每个单独的图形放到 pdf 中的新页面上。理想情况下,我可以运行代码并生成 3 页 PDF。 EG -

Page 1 = Dom
Page 2 = Nick
Page 3 = Tom 

任何帮助将不胜感激!谢谢!

【问题讨论】:

可能将每个保存为单独的 PDF(可能保存为临时文件),然后在创建后将它们组合起来。 【参考方案1】:

我想我已经通过更多搜索回答了我的问题:

这是绘制并保存到多个页面的代码:

#Plot Images and save pdf
import matplotlib.backends.backend_pdf
import matplotlib.pyplot as plt
import seaborn as sns
plt.style.use('seaborn')
pdf = matplotlib.backends.backend_pdf.PdfPages("output.pdf")
for name in df['Name'].unique():
    fig, ax = plt.subplots()
    sub = df[df.Name == name]
    sns.barplot(y='Attempt',x='Score',data=sub, orient='h', ax=ax,order=sub['Attempt'])
    ax.set_title(name.capitalize())
    pdf.savefig( fig )
pdf.close()

【讨论】:

以上是关于将每个 seaborn 图形附加到 for 循环内的 PDF的主要内容,如果未能解决你的问题,请参考以下文章

如何在Python中的for循环内创建对象列表而不继承属性值[重复]

从for循环将系列附加到dict或list或dataframe?

Bash将值附加到for循环内的列表中

为每个循环附加到一个新列表

如何在for循环中将数据附加到空列表?

pyspark 在 for 循环下的每个进程之后附加非常大的多个数据帧(例如:在每日 ETL 之后附加)