Заполнение Matplotlib между двумя строками

#python #matplotlib

#python #matplotlib

Вопрос:

Доброе утро, я пытаюсь использовать Matplotlib для заполнения между двумя строками, и я делаю вот так:

 plt.figure(figsize = (16,8));
plt.plot(estudo_df["Sales"], label='Original Data');
plt.plot(forecast_2018["yhat"], color='red', label='Predictions');
plt.plot(forecast_2018["yhat_lower"], color='green', label='Predictions Lower');
plt.plot(forecast_2018["yhat_upper"], color='Blue', label='Predictions Blue');
plt.fill_between(forecast_2018["yhat_lower"],forecast_2018["yhat_upper"] , color='grey', alpha='0.5')
plt.legend();
plt.title('Forecast Sales Prophet - ' sh);
plt.xlabel('Date');
plt.ylabel('Sales');
  

Но это не работает…

Я использую два DS, которые имеют одинаковую сумму и «идентификатор индекса», который является ДАТОЙ, estudo_df и forecast_2018

Кто-нибудь знает, где ошибка?

Комментарии:

1. Вы получаете сообщение об ошибке? Если да, то что это за ошибка? Или это создает график, который просто не соответствует вашим ожиданиям… это помогло бы другим помочь вам, если бы вы описали результат вашего кода и то, что этот результат не соответствует вашим ожиданиям.

2. Я подозреваю, что проблема в том, что вы не даете никаких x значений fill_between . Они являются обязательным вводом. Так что, может быть plt.fill_between(x=range(len(forecast_2018["yhat_lower"]), y1=forecast_2018["yhat_lower"], y2=forecast_2018["yhat_upper"], ...)

Ответ №1:

Измените свой код в 2 местах:

  • передайте forecast_2018.index в качестве первого параметра fill_between,
  • измените альфа-параметр на float (вы передали строку).

Я запустил ваш код с одной закомментированной строкой:

 plt.figure(figsize = (8, 6));
#plt.plot(estudo_df["Sales"], label='Original Data');
plt.plot(forecast_2018["yhat"], color='red', label='Predictions');
plt.plot(forecast_2018["yhat_lower"], color='green', label='Predictions Lower');
plt.plot(forecast_2018["yhat_upper"], color='blue', label='Predictions Blue');
plt.fill_between(forecast_2018.index, forecast_2018["yhat_lower"],
    forecast_2018["yhat_upper"], color='#DDDDDD', alpha=0.5)
plt.legend();
sh = 'xx'
plt.title('Forecast Sales Prophet - '   sh)
plt.xlabel('Date')
plt.ylabel('Sales');
  

и получил:

введите описание изображения здесь

Индекс моего фрейма данных содержит даты, но имеет строковый тип.