Построение правой расширенной горизонтальной линии matplotlib - PullRequest
0 голосов
/ 07 мая 2020

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

1 - У меня есть pandas df с датами, ценами и значениями индикаторов
2 - я хочу построить на одном графике цену в виде линии, а также поверх цены, которую я хочу Постройте расширенную линию, где значения моих индикаторов выше порогового значения, ожидаемые результаты примерно такие, как на этой картинке. enter image description here

На втором снимке экрана вы можете увидеть эти цветные кружки на ценовой линии. Я хочу заменить их горизонтальной правой расширенной линией. data .csv: https://drive.google.com/open?id=1ncTTvwJXVeh6dMHrIML7MpjlS-Yfox_o

enter image description here Фрагмент кода, который я пытаюсь:

import pandas as pd 
import matplotlib.pyplot as plt

df = pd.read_csv('plot_data.csv')

BW121 = df[['BW121','Close']]
BW121 = BW121.where(BW121.BW121>70).dropna()

BW50=df[['BW50','Close']]
BW50 = BW50.where(BW50.BW50>70).dropna()

LW121 =df[['LW121','Close']]
LW121 = LW121.where(LW121.LW121>70).dropna()

LW50 = df[['LW50','Close']]
LW50 = LW50.where(LW50.LW50>70).dropna()

plt.style.use('fivethirtyeight')
plt.scatter(BW121.index,BW121['Close'], color ="green",label='BW121')
plt.scatter(BW50.index , BW50['Close'], color ="blue", s=80,label='BW50')

plt.scatter(LW121.index , LW121['Close'], color ="red", s=80,label='LW121')
plt.scatter(LW50.index , LW50['Close'], color ="orange", s=80,label='LW50')

#Price Plot
plt.plot(df.index, df['Close'], marker='',alpha = 0.5,color='green')

plt.legend(loc='upper right')
plt.show()

1 Ответ

1 голос
/ 07 мая 2020

Чтобы построить горизонтальную линию в matplotlib, вы можете использовать plt.axhline:

plt.scatter(BW50['Close'], color="blue", label='BW50')

axhline имеет аргументы xmin и xmax, если вы предпочитаете, чтобы строки не заполнялись сюжет по горизонтали.

В зависимости от вашего конкретного c результата вы можете попробовать:

import pandas as pd 
import matplotlib.pyplot as plt

df = pd.read_csv('plot_data.csv')

BW121 = df[['BW121','Close']]
BW121 = BW121.where(BW121.BW121>70).dropna()

BW50=df[['BW50','Close']]
BW50 = BW50.where(BW50.BW50>70).dropna()

LW121 =df[['LW121','Close']]
LW121 = LW121.where(LW121.LW121>70).dropna()

LW50 = df[['LW50','Close']]
LW50 = LW50.where(LW50.LW50>70).dropna()

plt.style.use('fivethirtyeight')
plt.scatter(BW121.index,BW121['Close'], color ="green",label='BW121')
plt.scatter(BW50.index , BW50['Close'], color ="blue", s=80,label='BW50')
# axhline used here, one for each 'Close' value
for i in BW50['Close']:
    plt.axhline(i, color ="blue", lw=0.5)

plt.scatter(LW121.index , LW121['Close'], color ="red", s=80,label='LW121')
plt.scatter(LW50.index , LW50['Close'], color ="orange", s=80,label='LW50')
# could repeat axhline here for other data etc.

#Price Plot
plt.plot(df.index, df['Close'], marker='',alpha = 0.5,color='green')

plt.legend(loc='upper right')
plt.show()

example

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