Как мне построить несколько axvspan ИЛИ vspan на линейном графике, когда значение True - PullRequest
2 голосов
/ 30 октября 2019

Я пытаюсь выделить на линейном графике, который имеет линию цены акций, а затем полосу выше и ниже линии цены акций.

У меня есть столбец, значение которого "1" каждыйвремя, когда цена акций превышает полосы, и Nan, когда цена акций находится между строк.

Я хочу выделить регионы, где значение равно «1», или когда цена акций превышает полосы. Это происходит несколько раз, и я не могу найти способ создать более одного vspan правильно.

Я пользуюсь пандами. Даты являются осью X и проиндексированы. Любая помощь с этим?

Я смотрю широко за последние сутки, но не вижу возможности. Я изо всех сил пытаюсь выяснить, как использовать для этого matplotlib.

В приведенном ниже коде я пытаюсь сравнить «OPEN» (столбец, который равен 1, если цена превышает полосу) и «AAPL.O", которая является переменной ric, которая является ценой закрытия

def add_SMA_bands(data,ric):
    df = pd.DataFrame(data[ric])
    SMAname = "SMA_{}".format(ric)
    SMAstd = "SMAstd_{}".format(ric)
    SMAUpper = "UpperBand_{}".format(ric)
    SMALower = "LowerBand_{}".format(ric)
    df[SMAname] = df["{}".format(ric)].rolling(SMA).mean()   
    df[SMAUpper] = df[SMAname] + (df["{}".format(ric)].rolling(SMA).std())*2
    df[SMALower] = df[SMAname] - (df["{}".format(ric)].rolling(SMA).std())*2     
    return df

dfs={}

for ric in rics:
    df = add_SMA_bands(data,ric)
    df.dropna(inplace=True)
    dfs[ric]=df

for ric in rics:
    dfs[ric]["OVER"] = np.where(dfs[ric][ric]<dfs[ric]["LowerBand_{}".format(ric)],1, (np.where(dfs[ric][ric]>dfs[ric]["UpperBand_{}".format(ric)],1,0)))
    dfs[ric]["OVER"][dfs[ric]["OVER"]==0]=np.nan

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...