无法让文字显示在我的Python图中

时间:2019-06-21 18:42:10

标签: python pandas matplotlib plot

我一直试图弄清楚如何将两个指标输出到要显示的图表中。我四处看看,发现这样做的方法是通过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进行绘制,但仍然无法运行。关于我在做什么错的任何想法吗?

编辑: 我试图避免使用熊猫包装纸再次绘图。现在我得到了:

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 个答案:

答案 0 :(得分:2)

我不确定为什么,但是您的代码可以在装有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一起排名。

答案 1 :(得分:2)

我会使用AnchoredText在轴的一角放置一些文本。

at = matplotlib.offsetbox.AnchoredText("My Text", loc='upper right', frameon=True)
plt.gca().add_artist(at)