ax[1] 图未显示

ax[1] figure is not shown

我正在尝试在循环中创建一个倍数。第一个循环通过添加某些图(在本例中为两个图)创建上图(ax[0]),同时第二个循环(ax[1])创建下图,只有一个图。

在第二次循环的第一次迭代后,保存图形并重置第二个图形(ax[1])。重复该过程,直到达到第二个循环的最后一次迭代。

for i in objetos:          # Each object contains first upper figure info as lists of lists
    data_sets = i.getProcesados()   # For labeling
    fechas = i.getFechas()          # List of dates
    promedios = i.getPromedios()    # List of values
    agregado = i.getAgregado()      # For labeling
    fig, ax = plt.subplots(2, 1, figsize = (18,13), sharex = True)
    fig.subplots_adjust(hspace=0)
    
# FIRST LOOP -----> CREATES THE UPPER FIGURE ---------------------------------
    for fecha,valor,label in zip(fechas,promedios,data_sets):
        ax[0].plot_date(fecha, valor, label = label)
        ax[0].legend(framealpha=1, borderpad = 0.7, frameon = True,
        labelspacing = 0.7, fontsize = 17, loc='best')
            
    # First axis (ax[0]) configuration:
    x_minima = int(min([j[0] for j in fechas]))
    x_maxima = int(max([j[-1] for j in fechas]))
    ax[0].set_xticks(range((x_minima),(int(x_maxima)),60))
    ax[0].set_xlim(x_minima,x_maxima)
    ax[0].tick_params(labelsize=17)
    months = mdates.MonthLocator(interval=2)
    months_fmt = mdates.DateFormatter('%m')
    ax[0].xaxis.set_minor_locator(months)
    ax[0].xaxis.set_minor_formatter(months_fmt)
    ax[0].grid(axis='y')
    ax[0].grid(which='minor')
    ax[0].set_title((i.getAgregado() + " (" + "Zona de " + zona + ")" + "\n"), fontsize = 24)
    ax[0].set_ylabel("Deformación (cm)", fontsize = 22, labelpad = 11)

# SECOND LOOP -----> CREATES THE LOWER FIGURE ---------------------------------
    
    piezos, registros = Piezo.EsteAgregado(agregado)    # Object provinding information

    for l in piezos.Piezometro:
        serie = registros.loc[l]    
        dates = list(serie.Fechas)                  # List of dates
        values = list(serie.Cota_piezométrica)      # List of values
        etiqueta = 'P - ' + str(l)                  # For labeling
        ax[1].plot_date(dates, values, '#040405', label = etiqueta, lw=2) 
        ax[1].set_xlim(x_minima,x_maxima)
        
    # Second axis (ax[1]) configuration:
        years = mdates.YearLocator()
        years_fmt = mdates.DateFormatter('\n%Y')
        ax[1].xaxis.set_major_locator(years)
        ax[1].xaxis.set_major_formatter(years_fmt)
        months = mdates.MonthLocator(interval=2)
        months_fmt = mdates.DateFormatter('%m')
        ax[1].xaxis.set_minor_locator(months)
        ax[1].xaxis.set_minor_formatter(months_fmt)
        ax[1].tick_params(which = 'major', labelsize=17)
        ax[1].tick_params(which = 'minor', labelsize=15,)
        ax[1].legend(framealpha=1, borderpad = 0.7, frameon = True,
            labelspacing = 0.7, fontsize = 18, loc='best')
        ax[1].grid(axis='y')
        ax[1].grid(which='minor')
        ax[1].set_ylabel("Piezometría (m)", fontsize = 22, labelpad = 11)
    
        # Figure saving:
        directorio = os.path.dirname(nombreSalida)
        dir_destino = os.path.join(directorio, ("Gráficas " + zona + "/"))
        if not os.path.isdir(dir_destino):
            os.makedirs(dir_destino)
        imagen = (i.getAgregado() + '-P-' + str(l) + ".png")
        plt.savefig(dir_destino + imagen)
        
        plt.cla()   # Close last axis
    plt.clf()
    plt.close(fig)


不过,只显示上图。我不知道会发生什么,所以我真的很感激有人的帮助。 一件奇怪的事情是 plt.show() 仅在尚未到达第二个循环时才起作用;在第二个循环中,plt.show() 不起作用。在嵌套循环之外,第二个循环图显示正确。

This link允许查看错误结果。

问题解决了。如果有人感兴趣,图中没有显示,因为日期是 pandas 格式。我不得不通过以下代码行将它们转换为 matplotlib 格式(即数字格式):

dates = [date2num(datetime.strptime(i,'%Y-%m-%d')) for i in dates]