Вы можете построить извлеченные значения, используя
plt.scatter(movement['time'].tolist(), price_movement.tolist(), marker='o')
plt.scatter(crossing_yes['time'].tolist(), price_crossing_yes.tolist(), marker='.')
plt.scatter(crossing_no['time'].tolist(), price_crossing_no.tolist(), marker='+')
movement
, crossing_yes
и crossing_no
, которые являются DataFrame
объектами, поэтому необходимо указать столбец.Это эквивалентно, например,
time_movement = movement.time
plt.scatter(time_movement.tolist(), price_movement.tolist())
, но немного менее многословно.Конечно, вы можете сжать это дальше, выполнив внутреннюю фильтрацию
plt.scatter(df[(df.High_cross == True)&(df.movement_up == 'movement')]['time'].tolist(),
df[(df.High_cross == True)&(df.movement_up == 'movement')]['price'].tolist(),
marker='o')
plt.scatter(df[(df.event == 'crossing down')&(df.triggered_up == 'Yes')]['time'].tolist(),
df[(df.event == 'crossing down')&(df.triggered_up == 'Yes')]['price'].tolist(),
marker='.')
plt.scatter(df[(df.event == 'crossing down')&(df.triggered_up == 'No')]['time'].tolist(),
df[(df.event == 'crossing down')&(df.triggered_up == 'No')]['price'].tolist(),
marker='+')
, которая немного более краткая и поддается циклу, но требует второго прохода, который в противном случае был бы менее интенсивным.
Вот полный пример с использованием предоставленных данных
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame(
[['2019-01-01 11:37:57.434', 0.00224242, 'up', 'crossing up', True, False],
['2019-01-01 11:37:57.784', 0.00224243, 'up', 0, False, False],
['2019-01-01 11:38:38.575', 0.00224171, 'up', 0, False, False],
['2019-01-01 11:38:57.602', 0.00224311, 'up', 0, False, False],
['2019-01-01 11:39:21.907', 0.00224473, 'up', 0, True, 'movement'],
['2019-01-01 11:39:40.320', 0.00224422, 'up', 0, True, True],
['2019-01-01 11:40:16.966', 0.00224697, 'up', 0, True, True],
['2019-01-01 11:41:16.966', 0.00224694, 'down', 0, True, 'Movement'],
['2019-01-01 11:42:16.966', 0.00224674, 'down', 0, False, False],
['2019-01-01 11:43:16.966', 0.00224672, 'down', 'crossing down',
False, False, 'Yes']])
df.columns = ['time', 'price', 'direction', 'event', 'High_cross',
'movement_up', 'triggered_up']
df['price'] = df.price.astype(float)
df['time'] = pd.to_datetime(df['time'])
df.plot(y='price', x='time', legend=False)
plt.scatter(df[(df.High_cross == True)&(df.movement_up == 'movement')]['time'].tolist(),
df[(df.High_cross == True)&(df.movement_up == 'movement')]['price'].tolist(),
marker='o')
plt.scatter(df[(df.event == 'crossing down')&(df.triggered_up == 'Yes')]['time'].tolist(),
df[(df.event == 'crossing down')&(df.triggered_up == 'Yes')]['price'].tolist(),
marker='.')
plt.scatter(df[(df.event == 'crossing down')&(df.triggered_up == 'No')]['time'].tolist(),
df[(df.event == 'crossing down')&(df.triggered_up == 'No')]['price'].tolist(),
marker='+')
plt.ylabel("Price")
plt.xlabel("Time")
plt.show()
