#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');
и получил:
Индекс моего фрейма данных содержит даты, но имеет строковый тип.