将每个 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循环内创建对象列表而不继承属性值[重复]