AI,量化的plotly数据可视化简化接口:Plotly Express

AI,量化的plotly数据可视化简化接口:Plotly Express

Plotly 是新一代的数据可视化神器,TopQ量化开源团队,还特意出版了国内首部plotly中文图书,参见:
全网第一部中文专著:plotly可视化数据分析 – 极宽 http://www.topquant.vip/?p=456
Plotly互动型python绘图神器 – 极宽 http://www.topquant.vip/?p=343

plotly虽然功能强大,却一直没有得到广泛应用,大部分py开发人员,还在使用陈旧的matplot,其中最重要的原先,就最与plotly的设置过于繁琐。
为此,plotly推出了其简化接口:Plotly Express,简称:px
px之于plotly,和py可视化数据分析,类似keras于TensroFlow、pyTorch等神经网络平台。
px采用ROR等新一代“约定优先”编程模式,内置了大量实用、现代的绘图模板,用户只需调用简单的api函数,即可生成漂亮的互动画面。
px Plotly.py 的高级封装,它为复杂的图表提供了一个简单的语法。
px与 Plotly 生态系统的其他部分完全兼容:在您的 Dash 应用程序中使用它,使用 Orca 将您的数据导出为几乎任何文件格式,或使用JupyterLab 。

px内置了的图表组合,涵盖了90%常用的绘图需要:

常用图表:

  • line,线条图,line_polar 极坐标线条图,line_ternary 三元线条图。line_mapbox 地图线条图,line_geo,地理坐标线条图
  • scatter,散点图,scatter_3d,三维散点图,scatter_polar,极坐标散点图,scatter_ternary,三元散点图,scatter_mapbox,地图散点图,scatter_geo _地理坐标散点图,scatter_matrix 矩阵散点图
  • bar,条形图,bar_polar,极坐标条形图
  • area,面积图

其他专业图表:

  • violin,小提琴图
  • box,箱形图
  • histogram,直方图(histograms)
  • choropleth,等高(值)线图
  • density_contour,密度等高线图(双变量分布的密度等高线图)
  • parallel_coordinates,平行坐标
  • parallel_categories,平行类别#

由于网络问题,px的绘图,一般也是采用plotly.offline离线模式。一般会在程序开头,通过一下语句:
pyplt=plotly.offline
以简化代码

px,plotly的离线绘图有两种模式:

  • plotly.offline.plot(),以离线方式,在当前工作目录(或指定文件名),生成html格式的互动图像文件,或者位图文件,并自动打开。
  • plotly.offline.iplot(),是在jupyter notebook中专用的方法,即将生成的图形嵌入到ipynb文件中。

通常,我们采用前面一种方式:
plotly.offline.plot()
其简化形式为:
pyplt.plot()

plotly.offline.plot()的主要参数有:

  •   figure_or_data:plotly绘图object对象数据。
  •   show_link:bool型,建议为False,用于调整输出的图像是否在右下角带有plotly的标记
  •   link_text:str型输入,用于设置图像右下角的说明文字内容(当show_link=True时),默认为’Export to plot.ly’
  •   image:str型或None,建议为空值,或者:’png’,控制生成图像的下载格式,有’png’、’jpeg’、’svg’、’webp’,默认为None,即不会为生成的图像设置下载方式
  •   filename:str型,默认为’plot’,保存的互动html图像的文件名,文件后缀必须是;’.html’(或者不写),文件名可以带路径。
  •   image_height:int型,控制图像高度的像素值,默认为600
  •   image_width:int型,控制图像宽度的像素值,默认为800

需要说明的s,网络上面的各种案例当中,都存在一个严重的bug,无法输出图形。
这是因为以下两个原因:
#1,plot绘图前,没有运行init初始化语句:
pyplt.init_notebook_mode()

#2,直接调用px进行绘图,无法生成真正的图形。
必须先设置:px绘图生成的obj图形对象,保存到变量,再导入到plotly的plot绘图函数,才能真正生成图片。
xdr = px.scatter(df,x=’date’,y=’close’,color=’volume’,size=’volume’)
pyplt.plot(xdr,filename=’tmp/x001′,show_link=False,image=’png’)

以下是完整的px案例核心代码。

#
import plotly_express as px
import plotly
#
#----------------------
pyplt=plotly.offline
#plotly.offline.init_notebook_mode()
pyplt.init_notebook_mode()
#------------------------------------
#
#
df=pd.read_csv('data/002046.csv') #2018
print(df.tail())
#

#
#xdr = px.line(df,x='date',y='close')
#
#xdr = px.scatter(df,x='date',y='close',color='volume')
#
xdr = px.scatter(df,x='date',y='close',color='volume',size='volume')
#
pyplt.plot(xdr,filename='tmp/x001',show_link=False,image='png')
#--------------
print('\n @zok',px.__version__)
print('\n @zok')

 

以下是案例运行结果:
         date open high low close volume
238 2018-01-08 9.526 9.586 9.436 9.526 16978.0
239 2018-01-05 9.636 9.636 9.506 9.586 18380.0
240 2018-01-04 9.546 9.755 9.536 9.656 29127.0
241 2018-01-03 9.536 9.685 9.486 9.536 21140.0
242 2018-01-02 9.296 9.536 9.286 9.506 21979.0

由以上输出数据可以看出,案例使用的数据文件代码,是标准的股票日线数据OHLC格式。
股票代码,是A股代码:002046(王家卫又来来)

以下为案例的对应截图,分别对应案例当中的相关语句:

#1

xdr = px.line(df,x=’date’,y=’close’)

#2

xdr = px.scatter(df,x=’date’,y=’close’,color=’volume’)

#3
xdr = px.scatter(df,x=’date’,y=’close’,color=’volume’,size=’volume’)


#

其中,#2,#3两张scatter点图当中,通过以下语句:
xdr = px.scatter(df,x=’date’,y=’close’,color=’volume’)
xdr = px.scatter(df,x=’date’,y=’close’,color=’volume’,size=’volume’)

我们使用了类似hotmap热度图的颜色,以及点的size大小,来表示vol成交量的多少。

发表评论

电子邮件地址不会被公开。 必填项已用*标注