Python金融大数据分析——第五章数据可视化(2)金融学图表

5.2 金融学图表

5.2.1 mplfinance

matplotlib的finance库包含不少可视化的金融图表,由于几代更新迭代,finance库也发生了变化。

从2.2.0版本前调用:

import matplotlib.finance as mpf

到2.2.0版本后调用:

pip install https://github.com/matplotlib/mpl_finance/archive/master.zip

但会出现如下警告:

D:\download\python\lib\site-packages\mpl_finance.py:22: DeprecationWarning: 

  =================================================================

   WARNING: `mpl_finance` is deprecated:

    Please use `mplfinance` instead (no hyphen, no underscore).

    To install: `pip install --upgrade mplfinance` 

   For more information, see: https://pypi.org/project/mplfinance/

  =================================================================

  category=DeprecationWarning)

再到现在的mplfinance。总的来说,新模块mplfinance使用更加便捷。

mplfinance模块简介

mplfinance是专门用于金融数据分析的可视化分析模块,在安装mplfinance之前,需要安装matplotlib库和pandas。

使用mplfinance可以很快绘制均线、剔除停盘时间段空隙,时间坐标自动完成,非常方便、人性化。

mplfinance安装

DOS下安装如下:

pip install --upgrade mplfinance

Python金融大数据分析——第五章数据可视化(2)金融学图表_第1张图片

 mplfinance模块用法简介

import mplfinance as mpf
mpf.plot(data)

这里,data类型必须是pandas.DataFrame数据类型,必须包含’Open’, ‘High’, ‘Low’ 和 ‘Close’ 数据。

这里我们以调用雅虎近5年股票价格数据为例,更进一步描述上述内容:

import datetime
import matplotlib.pyplot as plt
import pandas_datareader.data as web

start = datetime.datetime(2015, 1, 1)
end = datetime.datetime(2020, 6, 16)
# 读取数据
df = web.DataReader('XOM', 'yahoo', start, end)
print(df)

 打印得到的股票行情如下:

              High        Low       Open      Close      Volume  Adj Close
Date                                                                         
2014-12-31  93.129997  92.059998  92.419998  92.449997  11337200.0  73.701263
2015-01-02  93.050003  91.809998  92.250000  92.830002  10220400.0  74.004189
2015-01-05  92.400002  89.500000  92.099998  90.290001  18502400.0  71.979301
2015-01-06  91.410004  89.019997  90.239998  89.809998  16670700.0  71.596634
2015-01-07  91.480003  90.000000  90.650002  90.720001  13590700.0  72.322098
...               ...        ...        ...        ...         ...        ...
2020-06-10  53.500000  50.599998  53.500000  50.650002  31156800.0  50.650002
2020-06-11  48.840000  46.099998  47.529999  46.180000  39183000.0  46.180000
2020-06-12  48.619999  45.910000  48.040001  47.169998  30968800.0  47.169998
2020-06-15  47.759998  44.750000  45.349998  47.139999  27929300.0  47.139999
2020-06-16  49.750000  47.240002  49.570000  48.200001  26203400.0  48.200001

[1374 rows x 6 columns]
import datetime
import matplotlib.pyplot as plt
import pandas_datareader.data as web
import mplfinance as mpf

start = datetime.datetime(2015, 1, 1)
end = datetime.datetime(2020, 6, 16)
# 读取数据
df = web.DataReader('XOM', 'yahoo', start, end)
# print(df)
mpf.plot(df)

Python金融大数据分析——第五章数据可视化(2)金融学图表_第2张图片

由于5年的股票数据,很难看出一些细节情况,这时,我们通过查看近一个月情况来感受细节。

通过mpf.plot中修改绘图类型,可更加直观感受mplfinance的真谛。

types中默认类型为ohlc,另外还有candle,line类型。

1)ohlc类型

start = datetime.datetime(2020, 6, 1)
end = datetime.datetime(2020, 6, 28)
# 读取数据
df = web.DataReader('XOM', 'yahoo', start, end)
# 修改plot绘图类型
# 通过参数types修改绘图类型,默认是ohlc,可以修改为candle,line。
mpf.plot(df)

Python金融大数据分析——第五章数据可视化(2)金融学图表_第3张图片

2)修改为candle类型:

mpf.plot(df, type='candle')

Python金融大数据分析——第五章数据可视化(2)金融学图表_第4张图片

3)修改为line类型:

mpf.plot(df, type='line')

Python金融大数据分析——第五章数据可视化(2)金融学图表_第5张图片

 增加绘制均线

mav可增加均线个数,mav=10,mav=(2,5,10)

mpf.plot(df, type='candle', mav=(2, 5, 10))

Python金融大数据分析——第五章数据可视化(2)金融学图表_第6张图片

mpf.plot(df, type='candle', mav=10)

Python金融大数据分析——第五章数据可视化(2)金融学图表_第7张图片

 添加成交量volume=True

# 添加成交量
mpf.plot(df, type='candle', mav=(2, 5, 10), volume=True)

Python金融大数据分析——第五章数据可视化(2)金融学图表_第8张图片

自动剔除非交易日空白

关键字参数默认show_nontrading=False
只看到停盘的时间段,show_nontrading=True

# 自动剔除非交易日空白
'''
关键字参数默认show_nontrading=False
只看到停盘的时间段,show_nontrading=True
'''
mpf.plot(df, type='candle', mav=(2, 5, 10), volume=True, show_nontrading=True)

Python金融大数据分析——第五章数据可视化(2)金融学图表_第9张图片

停盘的时间段就不会显示数据信息。

make_addplot概述

要分析金融数据中的Open,High,Low,Close,ma以外,还需要分析一些其他数据,需要使用make_addplot()方法。

make_addplot接受一个pandas,numpy,array以及list格式的数据(tuple不可以),和**kwargs参数。

注意:传递给make_addplot的数据参数必须要和将来画图传递给plot的数据参数行数要一致。

# make_addplot用法
start = datetime.datetime(2015, 1, 1)
end = datetime.datetime(2020, 6, 16)
# 读取数据
df = web.DataReader('XOM', 'yahoo', start, end)
add_plot = mpf.make_addplot(df['Volume'])
mpf.plot(df, addplot=add_plot)
plt.show()

Python金融大数据分析——第五章数据可视化(2)金融学图表_第10张图片

给图标添加多个数据绘制,直接将列表中传入参数即可。

# 绘制多个数据的图表,直接在列表传入至make_addplot中即可。
add_plot = mpf.make_addplot(df[['Volume', 'Adj Close']])
mpf.plot(df, addplot=add_plot)
plt.show()

Python金融大数据分析——第五章数据可视化(2)金融学图表_第11张图片

将数据分析的结果标记到图像中

 数据分析和可视化的目的,是为了要分析结果,并直观的在图表上展示结果。

例如:使用marker,以及markersize和color设置标记的大小和颜色

# 将分析结果显示到图像中
def data_analyze(data: pandas.DataFrame):
    '''
    简单的数据分析,并返回数据分析的结果列表,具体算法随便写写的
    :param data:
    :return:
    '''
    if data.shape[0] == 0:
        data = data
    s_list = []
    b_list = []
    b = -1
    for i, v in data['High'].iteritems():
        if v > data['Open'][i] and (b == -1 or b == 1):
            b_list.append(data['Low'][i])
            b = 0
        else:
            b_list.append(numpy.nan)  # 添加nan的目的是,对齐主图的k线数量
        if data['Close'][i] < data['Open'][i] and (b == -1 or b == 0):
            s_list.append(v)
            b = 1
        else:
            s_list.append(numpy.nan)
    return b_list, s_list


# make_addplot用法
start = datetime.datetime(2020, 1, 1)
end = datetime.datetime(2020, 6, 16)
# 读取数据
data = web.DataReader('XOM', 'yahoo', start, end)
b_list, s_list = data_analyze(data)
add_plot = [
    mpf.make_addplot(b_list, scatter=True, markersize=200, marker='^', color='y'),
    mpf.make_addplot(s_list, scatter=True, markersize=200, marker='v', color='r'),
    mpf.make_addplot(data[['Adj Close', 'Volume']]),
    mpf.make_addplot(data['Close'], panel='lower', color='g', secondary_y='auto')
]
mpf.plot(data, type='candle', addplot=add_plot, volume=True)
plt.show()

Python金融大数据分析——第五章数据可视化(2)金融学图表_第12张图片

 修改y轴刻度盘的位置和设置线型

# 修改主图y轴刻度盘位置和设置线形
# 在绘制plot函数中使用关键字参数style='sas'
# 可以把主图y左边放到右边,默认是default,设置线型是参数linestyle
start = datetime.datetime(2019, 6, 1)
end = datetime.datetime(2020, 6, 16)
# 读取数据
data = web.DataReader('XOM', 'yahoo', start, end)
b_list, s_list = data_analyze(data)
add_plot = [
    mpf.make_addplot(b_list, scatter=True, markersize=200, marker='*', color='y'),
    mpf.make_addplot(s_list, scatter=True, markersize=200, marker='s', color='r'),
    mpf.make_addplot(data[['Adj Close', 'Volume']], linestyle='dashdot'),
    mpf.make_addplot(data['Close'], panel='lower', color='g', secondary_y='auto'),
    mpf.make_addplot(data['Adj Close'], color='b', linestyle='dotted', secondary_y=True)
]
mpf.plot(data, type='candle', addplot=add_plot, volume=True, figscale=1.5, style='default')
plt.show()

Python金融大数据分析——第五章数据可视化(2)金融学图表_第13张图片

 设置marketcolors和mpf_style和其他常用设置

marketcolors设置图表颜色

 

你可能感兴趣的:(Python金融大数据分析)