Skip to content
Advertisement

Pandas: Plotting / annotating from DataFrame

There is this boring dataframe with stock data I have:

date         close    MA100      buy   sell
2022-02-14   324.95   320.12     0     0
2022-02-13   324.87   320.11     1     0
2022-02-12   327.20   321.50     0     0
2022-02-11   319.61   320.71     0     1

Then I am plotting the prices

import pandas as pd
import matplotlib.pyplot as plt

df = ...
df['close'].plot()
df['MA100'].plot()

plt.show()

So far so good… Then I’d like to show a marker on the chart if there was buy (green) or sell (red) on that day. It’s just to highlight if there was a transaction on that day. The exact intraday price at which the trade happened is not important.

So the x/y-coordinates could be the date and the close if there is a 1 in column buy (sell).

I am not sure how to implement this. Would I need a loop to iterate over all rows where buy = 1 (sell = 1) and then somehow add these matches to the plot (probably with annotate?)

I’d really appreciate it if someone could point me in the right direction!

Advertisement

Answer

You can query the data frame for sell/buy and scatter plot:

fig, ax = plt.subplots()
df.plot(x='date', y=['close', 'MA100'], ax=ax)
df.query("buy==1").plot.scatter(x='date', y='close', c='g', ax=ax)
df.query("sell==1").plot.scatter(x='date', y='close', c='r', ax=ax)

Output:

enter image description here

User contributions licensed under: CC BY-SA
3 People found this is helpful
Advertisement