可视化神器Plotly玩转股票图
本文是可视化神器Plotly绘图的第7篇,讲解的是如何通过Plotly来绘制与股市相关的图形,比如基础K线图、OHLC图等。
温馨提示⚠️:股市有风险,投资需谨慎,这并不妨碍大家学习Plotly
的绘图技巧!
扩展阅读
Plotly的文章会形成连载系列,前面5篇的Plotly可视化文章分别是:
导入库
1 | import pandas as pd |
股市图
下面简单介绍下两种股市相关的图:
- K线图
- OHLC图
K线图
K线由开盘价、收盘价、最高价、最低价四个价位组成。开盘价低于收盘价称为阳线,反之叫阴线。
中间的矩形称为实体,实体以上细线叫上影线,实体以下细线叫下影线。
1、红色上涨:
2、绿色下跌
3、持平状态
根据K线的计算周期可将其分为:日K线、周K线、月K线、年K线
OHLC线图
摘录来自维基百科的一段介绍:
美国线**(英语:Open-High-Low-Close chart,OHLC chart),以竖立的线条表现股票价格的变化,可以呈现“开盘价、最高价、最低价、收盘价”,竖线呈现最高价和最低价间的价差间距,左侧横线代表开盘价,右侧横线代表收盘价
绘制OHLC图
绘图数据
在本文中很多图形都是基于Plotly中自带的一份关于苹果公司AAPL的股票数据绘制,先看看具体的数据长什么样子:利用pandas读取网站在线的csv文件
1 | # 读取在线的csv文件 |
数据大小为:
1 | df.shape |
所有的字段为:
1 | df.columns |
基础绘图
1 | # The 'close' property is an array that may be specified as a tuple, list, numpy array, or pandas Series |
添加文本信息和备注
1 | fig = go.Figure(data=go.Ohlc( |
上图中添加了方框中的特选部分和备注
自定义颜色
上面的图形是Plotly自带的颜色:涨是红色,跌是绿色,下图中将涨变成了蓝色
1 | fig = go.Figure(data=[go.Ohlc( |
具体日期的OHLC图
上面的图形都是连续型日期(基于月份)的OHLC图形,下面介绍的是如何绘制具体某些日期的OHLC图形
1 | # 如何生成一个datetime时间对象 |
1 | # 绘制的4份数据 |
增加悬停信息hovertext
悬停信息指的是:在图形中数据本身是不能看到的,当我们将光标移动到图中便可以看到对应的数据。
还是通过苹果公司股票的数据为例:
1 | hovertext=[] # 添加悬停信息 |
上面图中的红色部分就是悬停信息
基于时间序列
绘图数据
下面开始介绍的是如何绘制基于时间序列time series的股票图形,使用的是Plotly中自带的股票数据:
1 | stocks = px.data.stocks() |
第一个字段是日期时间,其余字段是不同的公司名称:谷歌、苹果、亚马逊等
基于px实现
我们利用plotly_express来实现基础图形的绘制,选取的公司是FB:Facebook
1 | # 绘制FB股票走势 |
基于go实现
下面采用的是基于go方法实现:
1 | import pandas as pd |
共享时间轴
1 | import plotly.express as px |
1 | fig = px.bar( |
多面图共享时间轴
1 | fig = px.area( |
改变参数每行显示2个图形:
1 | fig = px.area( |
Label标签个性设置
1 | fig = px.line( |
基于直方图的时间序列实现
1 | import plotly.express as px |
上面绘制的是单纯的直方图,再此基础上可以结合散点图来进行展示:
1 | import plotly.express as px |
指定交易日
1 | import plotly.graph_objects as go |
1 | # 添加画布 |
指定交易范围
在某个时间范围内进行绘图,还是以苹果公司股票为例:
1 | # px 实现 |
带有区间滑块绘图
1 | import plotly.express as px |
滑块和时间按钮结合
除了滑块,我们还可以在图形中还可以设置按钮进行选择:
1 | import plotly.express as px |
隐藏周末和交易日
1、首先看看在某个具体的时间段内,如果我们不对非交易日进行处理,图形会是什么样子?
1 | # 默认形式 |
2、指定需要隐藏的时间:可以是星期,也可以是具体的某天
1 | # 隐藏周末和节假日 |
隐藏非交易时间
在一天中并不是24小时都在交易的,我们需要对非交易时间段进行隐藏:
1 | import plotly.express as px |
1 | df5 = pd.DataFrame(dict( |
实战案例
下面我们通过A股中的3个股票来实际绘图:
- 中国平安
- 平安银行
- 福建金森
tushare
tushare是一个提供财经类数据的网站,包含:股票、债券、期货、基金等,主要特点是:
- 数据丰富:拥有丰富的数据内容,如股票、基金、期货、数字货币等行情数据,公司财务、基金经理等基本面数据
- 获取简单:SDK开发包支持语言,同时提供HTTP Restful接口,最大程度方便不同人群的使用
- 落地方便:提供多种数据储存方式,如Oracle、MySQL,MongoDB、HDF5、CSV等,为数据获取提供了性能保证
为了使用这些数据,我们需要安装tushare库:
1 | pip install tushare # 下图显示安装成功 |
获取数据
我们以获取中国平安的数据为例:14个字段有开盘价open、最高价high等;每个网站机构采集数据的标准不同,本文中的数据仅供参考学习。
1 | import pandas as pd |
往数据中添加两个字段:
1 | pingan = pingan.reset_index() |
同样方法可以获取平安银行和福建金森的股票数据
OHLC绘图
1 | fig = go.Figure(data=go.Ohlc( |
开启显示滑块:fig.update(layout_xaxis_rangeslider_visible=True)
合并数据绘图
我们将3个股票的数据进行合并再绘图,使用的是concat函数:
1 | # tushare_data |
3个股票的OHLC绘图:
1 | fig = go.Figure() |