Корректировка дат по оси X и исправление легенды в MatplotLib - PullRequest
0 голосов
/ 13 июня 2019

Мне было интересно, как я могу настроить свои даты здесь так, чтобы они были меньше и лучше подходили к выходным данным. Я пробовал вращаться, но они просто кажутся бесцельно плавающими ниже графика. Также я бы хотел, чтобы в легенде было либо y_pred, либо y_test один раз где-нибудь, где она не перекрывала бы мои диаграммы.

Эти субплоты добавляются через цикл, и это не всегда будет одинаковое количество циклов. Для справки no_splits определит, сколько циклов будет запущено методом TimeSeriesSplit. Я удалил много нерелевантного кода, чтобы было легче следовать

Вот мой код:

fig = plt.figure()
    tscv = TimeSeriesSplit(n_splits=self.no_splits)
    for train_index, test_index in tqdm(tscv.split(X)):
        X_train, X_test = X.iloc[train_index], X.iloc[test_index]
        y_train, y_test = y.iloc[train_index], y.iloc[test_index]

        # predict y values
        y_pred = self.regressor.predict(X_test)


        # plot y_pred vs y_test
        y_df = pd.DataFrame(index= X_test_index)
        y_pred = y_pred.reshape(len(y_pred), )
        y_test = y_test.reshape(len(y_test), )
        y_df['y_pred'] = y_pred
        y_df['y_test'] = y_test

        ax = fig.add_subplot(int(sqrt(self.no_splits)), int(sqrt(self.no_splits)+1), i)


        y_df.plot(title = 'Split{}'.format(i), ax=ax, legend=False)
        ax.tick_params(axis='x', rotation=45)

        plt.figlegend()
    plt.subplots_adjust(wspace=0, hspace=0)
    plt.show()

enter image description here

enter image description here

1 Ответ

1 голос
/ 13 июня 2019

Относительно меток даты: Вы можете назначить выравнивание по тикам в команде поворота, как показано в этой записи .

Чтобы уменьшить этикетки, у вас есть два варианта:

Параметр A : Импортируйте matplotlib.dates, чтобы получить доступ к DateFormatter и выберите формат, который приведет к уменьшению меток. (например, пропустить год или что-то). Затем вы также можете использовать локаторы для разметки меток по-разному.

Опция B : используйте rc_params или tick_params для определения размера шрифта, семейства и т. Д. Этот пост должен помочь вам начать.

Как видите, в Интернете должно быть много материала, чтобы вы могли ...

Относительно легенды

Вы можете настроить сюжет так, чтобы в нем не было легенды, используя plt.plot(x, y, label='_nolabel'). Это можно объединить с циклом for, например, чтобы рисовать метки только на первой итерации.

for i, (train_index, test_index) in enumerate(tqdm(tscv.split(X))):
    if i==0:
        plt.plot(x, y, label=label)
    else:
        plt.plot(x, y, label='_nolabel')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...