Python Matplotlib。在'中绘图;对于循环';同轴线

Python Matplotlib。在'中绘图;对于循环';同轴线,python,matplotlib,Python,Matplotlib,我有一个相当简单的问题,但有件事让我困惑了2天。 我需要绘制2+个文件。每个文件需要在总共25个绘图上打印,但必须在同一组轴上打印。(即,如果有2个文件,我需要25个绘图,每个绘图上有2行) 我有这个sudo代码,它生成50个绘图(每一行一个)…这是错误的 with open(bamlist, 'r') as bamlist: for bam in bamlist: #Opens the 2 files 'Generate data Here' d

我有一个相当简单的问题,但有件事让我困惑了2天。 我需要绘制2+个文件。每个文件需要在总共25个绘图上打印,但必须在同一组轴上打印。(即,如果有2个文件,我需要25个绘图,每个绘图上有2行)

我有这个sudo代码,它生成50个绘图(每一行一个)…这是错误的

with open(bamlist, 'r') as bamlist:
    for bam in bamlist:     #Opens the 2 files
        'Generate data Here'
        dataframe = []
        for line in data:
            line = line.split("\t")
            dataframe.append(line[0:4:1])
        df = pd.DataFrame(dataframe, columns=['Chromosome', 'Position', 'N', 'BaseCount'])

        grouped_df = df.groupby('Chromosome')     #groups dataframe into the required 25plots
        for df in grouped_df:
            density_data = 'Get density data from df'
            f, ax = plt.subplots()          
            sns.kdeplot(density_data, ax=ax, linewidth=1)
            pp.savefig()
pp.close()

有没有办法在第二次输入for循环时恢复到轴的初始设置,这样我就可以在25个图中得到每个图2条线(而不是50个图)?

您的问题源于您使用了:

f, ax = plt.subplots()
这意味着您每次点击该行(在您的情况下,50次)时都会生成一个新的子批次。您需要生成25个子地块,稍后再引用它们。您可以执行以下操作:

axes = []
for i in range(25):
    f,ax = plt.subplots()
    axes.append(ax)
然后在循环中:

for df_index in range(len(grouped_df)):
    df = grouped_df[df_index]
    density_data = 'Get density data from df'
    sns.kdeplot(density_data, ax=axes[df_index], linewidth=1)
您还可以检查轴是否不存在(如果它扩展到超过25个子批次或其他),如果不存在,则创建它。

使用plt.figure()也可以完成作业

iterate = -1
for df in grouped_df:
    iterate += 1
    plt.figure(iterate)
    density_data = 'Get density data from df'
    sns.kdeplot(density_data, linewidth=1)
    pp.savefig()
pp.close()

你想要一个图形上有25个子图,还是25个单独的图形?两者都可以。单独的数字将更容易查看。谢谢!帮了很多忙!我还将它用于plot.figure()谢谢您的回复。我很高兴它起到了作用,我也很高兴您能够使用figure()而不是subplot()来生成新绘图中的数据(在我写回复之前,评论中没有阐明这一点)。如果这个答案是你喜欢的,并且你觉得它可以帮助其他人寻找同样的东西,请“接受”这个答案。谢谢:)