Как установить ось X как временную шкалу с Matplotlib - PullRequest
0 голосов
/ 29 мая 2019

Я пытаюсь проанализировать данные из статистического API SentinelHub.Чтобы создавать отличные графики, я хотел бы отформатировать ось X как временную шкалу с интервалом в 1 месяц.

Поэтому я использую matplotlib, в частности, set_major_locator и MonthLocator как на этом page .

И не знаю почему, если это происходит из цикла, который я использую для генерации всех графиков или чего-то еще, но это не работает.

Кто-нибудь может мне помочь?

enter image description here

Вот мой код:

for year in time_df.year:

    charts_folder = '{}/{}_ndvi_charts_{}'.format(folder, os.path.basename(os.path.splitext(shp)[0]), year)

    if os.path.exists(charts_folder):
        shutil.rmtree(charts_folder)
        os.mkdir(charts_folder)
    else:
        os.mkdir(charts_folder)

    for block_id in block_id_list:
        block_df = df_data_noCloud[(df_data_noCloud['block_id'] == block_id) & (df_data_noCloud['year'] == year)]

        block_df = block_df.set_index(['date']).sort_index()

        nb_date = len(block_df)
        window = int(nb_date/2)

        if nb_date > 1:

            if window%2 == 0:
                window = window-1

            if nb_date > 4 and window > 3:
                block_df['ndvilis'] = signal.savgol_filter(block_df['ndvi'], window_length=window, polyorder=3)


            fig, g = plt.subplots(figsize=(20,10))
            plt.gca().set_ylim(0.2, 0.9)

            x = block_df.index
            ndvi = block_df['ndvi']
            ndvimin = block_df['10min']
            ndvimax = block_df['10max']
            ndvilis = block_df['ndvilis']

            ndvig = g.plot(x,ndvi, color='red', linestyle='--', label='NDVI')
            if nb_date > 4 and window > 3:
                ndvilisg = g.plot(x, ndvilis, color='blue', label='NDVI lissé')
            g.plot(x, ndvimax, color='orange', linestyle=':')
            g.plot(x, ndvimin, color='orange', linestyle=':')

            g.set_title('{} block {} - {}'.format(os.path.basename(os.path.splitext(shp)[0]), block_id, year))
            g.set_ylabel('NDVI')

            g.get_xaxis().set_major_locator(mdates.MonthLocator(interval=1))
            g.get_xaxis().set_major_formatter(mdates.DateFormatter("%b %Y"))
            g.set_xticklabels(block_df.index,rotation=90)

            handles, labels = g.get_legend_handles_labels()
            g.legend(handles, labels)

            plt.savefig('{0}/{1}_{3}_block_{2}.png'.format(charts_folder, os.path.basename(os.path.splitext(shp)[0]), block_id, year), dpi=150)

        else:
            img = Image.new('RGB', (600, 100), color = (0, 0, 0))

            #fnt = ImageFont.load('arial.pil')
            d = ImageDraw.Draw(img)
            d.text((10,10), "Not enough data to plot", fill=(255, 255, 255), align = 'center')

            img.save('{0}/{1}_{3}_block_{2}.png'.format(charts_folder, os.path.basename(os.path.splitext(shp)[0]), block_id, year)) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...