Матплотлиб Легенда с Осью - PullRequest
0 голосов
/ 08 июня 2018

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

Как добавить легенду, чтобы первая полоса отображалась как "Ошибки обучения", вторая - как "Ошибки Val", а третья - как "Ошибки теста"?

plt.figure(figsize=(20,10))
ax = plt.subplot(111)

x1 = [i-0.2 for i in range(len(train_errors))]
x2 = [i for i in range(len(train_errors))]
x3 = [i+0.2 for i in range(len(train_errors))]

ax.bar(x1, train_errors, width=0.2, color='b', align='center')
ax.bar(x2, val_errors, width=0.2, color='g', align='center')
ax.bar(x3, test_errors, width=0.2, color='r', align='center')
ax.set_xticklabels(X)
ax.xaxis.set_major_locator(ticker.FixedLocator([i-0.05 for i in x2]))

ax.legend((bar), ('label1'))

ax.set_xlabel('Models')
ax.set_ylabel('RMSE')
ax.set_title('Regression Models Comparison')
plt.show()

Спасибо!

1 Ответ

0 голосов
/ 08 июня 2018

Запись легенды для гистограммы, аналогичная многим другим художникам, создается путем указания аргумента label.

ax.bar(...., label="my label")
ax.legend()

Это также показано в первом примере в документации.

Полный пример:

import matplotlib.pyplot as plt

fig, ax = plt.subplots()

train_errors = [1,2,3,4,5]
val_errors = [2,1,4,2,3]
test_errors = [5,4,3,2,1]
X = list("ABCDE")

x1 = [i-0.2 for i in range(len(train_errors))]
x2 = [i for i in range(len(train_errors))]
x3 = [i+0.2 for i in range(len(train_errors))]

ax.bar(x1, train_errors, width=0.2, color='b', label="Train Errors")
ax.bar(x2, val_errors, width=0.2, color='g', label="Val Errors")
ax.bar(x3, test_errors, width=0.2, color='r', label="Test Errors")

ax.set_xticks(x2)
ax.set_xticklabels(X)

ax.legend()

ax.set_xlabel('Models')
ax.set_ylabel('RMSE')
ax.set_title('Regression Models Comparison')
plt.show()

enter image description here

...