【发布时间】:2021-02-09 15:06:48
【问题描述】:
我有一个包含一段时间内价格信息的数据框。我还使用布尔值将某些时期标记为好转或低迷。我想随着时间的推移绘制价格,并将上升 == True 的区域涂成绿色,将下降 == True 的区域涂成红色。我正在努力想办法做到这一点。
编辑:我正在尝试使用 matplotlib/seaborn 随着时间的推移在线图上绘制价格,并希望遮蔽“真实”区域。我尝试使用 ax.axvspan 执行此操作,但不确定如何为 x 传递正确的索引。
有什么想法吗?
price upturn downturn
2016-12-31 954.623021 False True
2017-01-01 973.662396 False True
2017-01-02 1011.492500 False True
2017-01-03 1020.493750 True False
2017-01-04 1076.784792 True False
2017-01-05 1051.258854 True False
2017-01-06 931.354688 True False
2017-01-07 865.056667 False True
2017-01-08 908.179063 False True
2017-01-09 891.121979 False True
2017-01-10 900.545208 False True
2017-01-11 845.028437 False True
2017-01-12 780.695313 False True
2017-01-13 805.582187 False False
2017-01-14 827.220625 False False
这里是方便使用的数据框:
import pandas as pd
from pandas import Timestamp
df = pd.DataFrame({'price': {Timestamp('2016-12-31 00:00:00'): 954.6230208333336,
Timestamp('2017-01-01 00:00:00'): 973.6623958333333,
Timestamp('2017-01-02 00:00:00'): 1011.4925000000002,
Timestamp('2017-01-03 00:00:00'): 1020.4937500000001,
Timestamp('2017-01-04 00:00:00'): 1076.784791666667,
Timestamp('2017-01-05 00:00:00'): 1051.2588541666669,
Timestamp('2017-01-06 00:00:00'): 931.3546875000002,
Timestamp('2017-01-07 00:00:00'): 865.0566666666665,
Timestamp('2017-01-08 00:00:00'): 908.1790625000002,
Timestamp('2017-01-09 00:00:00'): 891.1219791666667,
Timestamp('2017-01-10 00:00:00'): 900.5452083333333,
Timestamp('2017-01-11 00:00:00'): 845.0284375,
Timestamp('2017-01-12 00:00:00'): 780.6953125000001,
Timestamp('2017-01-13 00:00:00'): 805.5821874999998,
Timestamp('2017-01-14 00:00:00'): 827.2206249999999},
'upturn': {Timestamp('2016-12-31 00:00:00'): False,
Timestamp('2017-01-01 00:00:00'): False,
Timestamp('2017-01-02 00:00:00'): False,
Timestamp('2017-01-03 00:00:00'): True,
Timestamp('2017-01-04 00:00:00'): True,
Timestamp('2017-01-05 00:00:00'): True,
Timestamp('2017-01-06 00:00:00'): True,
Timestamp('2017-01-07 00:00:00'): False,
Timestamp('2017-01-08 00:00:00'): False,
Timestamp('2017-01-09 00:00:00'): False,
Timestamp('2017-01-10 00:00:00'): False,
Timestamp('2017-01-11 00:00:00'): False,
Timestamp('2017-01-12 00:00:00'): False,
Timestamp('2017-01-13 00:00:00'): False,
Timestamp('2017-01-14 00:00:00'): False},
'downturn': {Timestamp('2016-12-31 00:00:00'): True,
Timestamp('2017-01-01 00:00:00'): True,
Timestamp('2017-01-02 00:00:00'): True,
Timestamp('2017-01-03 00:00:00'): False,
Timestamp('2017-01-04 00:00:00'): False,
Timestamp('2017-01-05 00:00:00'): False,
Timestamp('2017-01-06 00:00:00'): False,
Timestamp('2017-01-07 00:00:00'): True,
Timestamp('2017-01-08 00:00:00'): True,
Timestamp('2017-01-09 00:00:00'): True,
Timestamp('2017-01-10 00:00:00'): True,
Timestamp('2017-01-11 00:00:00'): True,
Timestamp('2017-01-12 00:00:00'): True,
Timestamp('2017-01-13 00:00:00'): False,
Timestamp('2017-01-14 00:00:00'): False}})
所需输出示例:
【问题讨论】:
标签: python pandas matplotlib seaborn