首页 文章

Pandas DataFrame Matplotlib BoxPlot Boxes

提问于
浏览
4

如何制作一个箱形图,其中我的数据框对象中的每一行都是图中的一个方框?

我有一些股票数据,我想用箱形图绘制 . 我的数据来自雅虎财经,包括每个交易日的开盘价,最高价,最低价,收盘价,调整收盘价和成交量数据 . 我想绘制一个盒子图,其中每个盒子是OHLC价格行动的1天 .

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from pandas.io.data import DataReader

# get daily stock price data from yahoo finance for S&P500
SP = DataReader("^GSPC", "yahoo") 

SP.head()
             Open        High        Low         Close       Volume          Adj Close
Date                        
2010-01-04   1116.56     1133.87     1116.56     1132.99     3991400000      1132.99
2010-01-05   1132.66     1136.63     1129.66     1136.52     2491020000      1136.52
2010-01-06   1135.71     1139.19     1133.95     1137.14     4972660000      1137.14
2010-01-07   1136.27     1142.46     1131.32     1141.69     5270680000      1141.69
2010-01-08   1140.52     1145.39     1136.22     1144.98     4389590000      1144.98

plt.figure()
bp = SP.boxplot()

但是当我将此数据框绘制为箱线图时,我只得到一个包含整个Volume列的Open,High,Low和Close值的框 .

同样,我尝试重新采样我的调整后收盘每日价格数据以获得每周OHLC:

close = SP['Adj Close']
wk = close.resample('W', how='ohlc')
wk.head()

             open        high        low         close
Date                
2010-01-10   1132.99     1144.98     1132.99     1144.98
2010-01-17   1146.98     1148.46     1136.03     1136.03
2010-01-24   1150.23     1150.23     1091.76     1091.76
2010-01-31   1096.78     1097.50     1073.87     1073.87
2010-02-07   1089.19     1103.32     1063.11     1066.19

这产生了一个带有4个盒子的Box Plot . 每个框是每列的范围,而不是行 . 例如,第一个Box“open”显示整个“open”列的Open,Close,High和Low .

但我真正想要的是每个“日期”(我的DataFrame的索引或行)的1个框 . 所以第一个Box将显示第一行的OHLC,'2010-01-10' . 第二个框将是第二行('2010-01-17') .

我真正想要的是我原始每日数据(SP DataFrame)中的每一行都是它自己的OHLC Box . 基本上我想要每日烛台,生成一个boxplot() .

Open        High        Low         Close     
    Date                        
    2010-01-04   1116.56     1133.87     1116.56     1132.99

如何使用Pandas DataFrame和Matplotlib boxplot()执行此操作?我只想要一个基本的boxplot图,其中DataFrame中的每一行都是图中的OHLC框 . 在这一点上没什么好看的 . 谢谢!

1 回答

  • 4

    正如我在评论中所说,你真的不想要箱形图 . 相反,你应该制作一个烛台图表 . 这里有一些代码可以帮助您入门 .

    import numpy as np
    import pandas
    import matplotlib.pyplot as plt
    from matplotlib.finance import candlestick, candlestick2
    import matplotlib.dates as mdates
    from pandas.io.data import DataReader
    
    # get daily stock price data from yahoo finance for S&P500
    SP = DataReader("^GSPC", "yahoo")
    SP.reset_index(inplace=True)
    print(SP.columns)
    SP['Date2'] = SP['Date'].apply(lambda date: mdates.date2num(date.to_pydatetime()))
    fig, ax = plt.subplots()
    csticks = candlestick(ax, SP[['Date2', 'Open', 'Close', 'High', 'Low']].values)
    plt.show()
    

相关问题