gpt4 book ai didi

python - Seaborn 注释会覆盖之前的注释

转载 作者:行者123 更新时间:2023-11-30 22:44:23 24 4
gpt4 key购买 nike

我正在尝试循环遍历 pandas 数据帧并将图表附加到 pdf 中。这是示例代码:

import random
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
from matplotlib.backends import backend_pdf

df = pd.DataFrame({'a':[a + + random.random() for a in range(12)] ,
'b':[ b + random.random() for b in range(12,24)]})
print(df)

chunk_size = 3 # number of rows in heatmap
n_chunks = len(df)//chunk_size # number of pages in heatmap pdf

with backend_pdf.PdfPages('chart.pdf') as pdf_pages:
for e,(k,g) in enumerate(df.groupby(np.arange(len(df))//chunk_size)):
#print(k,g.shape)
snsplot = sns.heatmap(g, annot=True, cbar=False, linewidths=.5) #fmt="d",cmap="YlGnBu",
pdf_pages.savefig(snsplot.figure)

此代码可以正常添加页面,但之前页面中的所有注释似乎都覆盖(保留)在后续的所有页面中。

enter image description here enter image description here enter image description here enter image description here enter image description here

最佳答案

每次调用 sns.heatmap 时,它都会使用 plt.gca(),因此所有绘图都将指向相同的Axes对象(每个循环也可能会变慢,因为所有先前的艺术家都被渲染,但只是被最新的艺术家遮挡)。

我建议类似

fig, ax = plt.subplots()
with backend_pdf.PdfPages('chart.pdf') as pdf_pages:
for e,(k,g) in enumerate(df.groupby(np.arange(len(df))//chunk_size)):
#print(k,g.shape)
ax.cla()
snsplot = sns.heatmap(g, annot=True, cbar=False, linewidths=.5, ax=ax)
pdf_pages.savefig(snsplot.figure)

它传入一个 Axes 对象,以便seaborn知道在哪里绘制并在每个循环中显式清除它。

关于python - Seaborn 注释会覆盖之前的注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41541080/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com