Возникли проблемы с отображением текста на моем графике Python - PullRequest
0 голосов
/ 21 июня 2019

Я пытался выяснить, как вывести две метрики на график, который я пытаюсь отобразить. Я осмотрелся здесь и обнаружил, что способ сделать это был через plt.text

Я пробовал около 80 различных вариантов, но до сих пор не могу получить его на выходе.

Это мой последний код:

mae = metrics.mean_absolute_error(y_test,y_pred)
mse = metrics.mean_squared_error(y_test, y_pred)
y_df = pd.DataFrame(index=pd.to_datetime(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
y_df.plot(title='{}'.format(gsc.best_estimator_))
plt.text(.5, .5, 'MAE:{}\nMSE:{}'.format(mae, mse))
plt.tight_layout()
plt.show(block=False)
print('end')
plt.show()

Моя диаграмма будет напечатана, но без текста. Я пытался переключиться с оболочки pandas matplotlib и прокладывать графики непосредственно с помощью plt.plot, но все равно не смог заставить его работать. Есть идеи, что я делаю не так?

Edit: Я пытался уйти от использования обертки панд, чтобы построить сюжет снова. Теперь я получаю:

enter image description here

mae = metrics.mean_absolute_error(y_test,y_pred)
mse = metrics.mean_squared_error(y_test, y_pred)
y_df = pd.DataFrame(index=pd.to_datetime(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
line1 = Line2D(test_index, y_pred,color="goldenrod")
line2 = Line2D(test_index, y_test, color="dodgerblue")
#y_df.plot(title='{}'.format(gsc.best_estimator_))
plt.text(.5, .5, 'MAE:{}\nMSE:{}'.format(mae, mse))
plt.tight_layout()
plt.show(block=False)
print('end')
plt.show()

Ответы [ 2 ]

2 голосов
/ 21 июня 2019

Я бы использовал AnchoredText, чтобы поместить текст в угол осей.

at = matplotlib.offsetbox.AnchoredText("My Text", loc='upper right', frameon=True)
plt.gca().add_artist(at)
2 голосов
/ 21 июня 2019

Я не уверен, почему, но ваш код работает на моем ноутбуке с matplotlib 3.1.0. Может быть, вы могли бы подумать о переустановке matplotlib.

import matplotlib.pyplot as plt

mae, mse = 1, 1
plt.plot()  # in your case : plt.plot(test_index, y_pred,color="goldenrod")
plt.text(.5, .5, 'MAE:{}\nMSE:{}'.format(mae, mse))
plt.tight_layout()
plt.show(block=False)
plt.show()

Относительно редактирования: создание подобных объектов Line2D не будет ничего связывать с фактическим сюжетом. Вы можете либо напрямую использовать

plt.plot(test_index, y_pred,color="goldenrod") 
plt.plot(test_index, y_test, color="dodgerblue")
plt.show()

или

fig, ax = plt.subplots()
line1 = Line2D(test_index, y_pred,color="goldenrod")
line2 = Line2D(test_index, y_test, color="dodgerblue")
ax.add_line(line1)
ax.add_line(line2)
plt.show()

Добавление текста с помощью AnchoredText Внешняя рамка

from matplotlib.offsetbox import AnchoredText
at = AnchoredText("My Text",
                   loc='lower left', frameon=True,
                   bbox_to_anchor=(0., 1.),
                   bbox_transform=ax.transAxes  # or plt.gca().transAxes
                   )
plt.gca().add_artist(at)

играть с bbox_to_anchor для позиции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...