Matplotlib.在'for loops'中绘制到同一轴

Mic*_*rry 2 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'
        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()
Run Code Online (Sandbox Code Playgroud)

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

Jak*_*ake 8

您的问题源于您使用:

f, ax = plt.subplots()
Run Code Online (Sandbox Code Playgroud)

这意味着每次点击该行时都会生成一个新的子图(在您的情况下为50次).您需要生成25个子图并稍后引用它们.你可以这样做:

axes = []
for i in range(25):
    f,ax = plt.subplots()
    axes.append(ax)
Run Code Online (Sandbox Code Playgroud)

然后在你的循环中:

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)
Run Code Online (Sandbox Code Playgroud)

您还可以检查轴是否不存在(如果它扩展到超过25个子图或其他),如果不存在,则创建它.