Это мой набор данных:
Date Price Peak Trough
01-Jan-2002 33.78 False False
02-Jan-2002 34.19 False False
03-Jan-2002 35.44 False False
04-Jan-2002 36.75 True False
05-Jan-2002 32.28 False True
Я хочу построить Цена в виде линейного графика с датой в виде оси X. Всякий раз, когда Пик равен True , на линии должна быть зеленая точка, а когда Trough равен True , на линии должна быть красная точка.
Должно выглядеть следующим образом:
![Example](https://i.imgur.com/0U1U8d6.png)
Лучшее решение было бы, если бы я мог просто закодировать его, чтобы оно показывало смысл, когда условие истинно. Но я не знаю как, поэтому я попытался создать два новых кадра данных. В df1 все точки данных, где Пик - Истина, в df2 - все точки, где Падь Истина. Затем я попытался построить 3 кадра данных на одном графике следующим образом:
df.plot(x = 'Date', y = 'Price', figsize=(16,10))
plt.scatter(x = dfP['Date'], y = dfP['Price'], c = 'green')
plt.scatter(x = dfT['Date'], y = dfT['Price'], c = 'red')
plt.yscale('log')
Однако он не масштабирует точки правильно:
![Plot](https://i.imgur.com/fa4S9lf.png)
Как можно Я правильно масштабирую даты для баллов? Или есть более простой способ, когда я могу просто установить точку, когда условие выполняется? Заранее спасибо.
Редактировать: Решением было не смешивать pandas с matplotlib. Код теперь выглядит следующим образом:
plt.figure(figsize=(16,10))
plt.plot(df['Date'], df['Dow Chemical Company (The)'])
plt.scatter(x = dfP['Date'], y = dfP['Dow Chemical Company (The)'], c = 'green')
plt.scatter(x = dfT['Date'], y = dfT['Dow Chemical Company (The)'], c = 'red')
plt.yscale('log')
Все точки теперь правильно отображаются на линии, но он показывает каждую отдельную дату на оси X, которую мне нужно исправить.