Plotly,一个用于做分析和可视化的在线平台,曾被网友称为“有史以来最牛逼”可视化神器(具体无从考据,只是在搜索资料时看到的),为何有如此称号?因为它功能强大,功能强大,功能强大!重要的事情说三遍!
其功能强大到不仅与多个主流绘图软件的对接,而且还可以像Excel那样实现交互式制图,而且图表种类齐全,并可以实现在线分享以及开源,等等;这种功能强大到还没有一个人能够完全掌握其全部应用,甚至国内对它的介绍使用也仅仅只是其中一部分。接下来笔者对plotly的一些隐藏功能进行介绍,并部分以python的使用来简单说明。
(一)关于Plotly的功能
关于Plotly的功能介绍,有的从图表类型上:基本图表:20种;统计和海运方式图:12种;科学图表:21种;财务图表:2种;地图:8种;3D图表:19种;拟合工具:3种;流动图表:4种。。。。。
有的从交互性上:可以与R、python、matlab等软件对接,并且是开源免费的,对于Python,Plotly与Python中matplotlib、numpy、pandas等库可以无缝地集成,可以做出很多非常丰富,互动的图表,并且文档非常健全,创建图形相对简单,另外申请了API密钥后,可以在线一键将统计图形同步到云端。。。。
有的从制图的美观上:基于现代的配色组合、图表形式,比matpltloa、R语言的图表,更加现代、绚丽。。。。
即便如此,尚不能完全概括其功能,比如在图表类型上,除以上所说,由于其开源性,plotly上还有很多网友上传的自制图表,在plotly主页(https://plot.ly/ )点击try free edition,在不登录的情况下(出来的log in 对话框点X),就会看到很多网友分享的图表,并且可以看到其代码,如下图:
这是一个不同国家回答“人类是否早期动物物种”的“yes”回答数量,但它不属于基本图形,因为其中一个柱子进行了颜色标注。我们点击该图形,在不登陆的情况下,就可以看到制作该类图形的api接口,根据它我们就可以模仿做出来该图形。
如图,其中data是该图形的数据表格,code则是不同软件api接口代码。
另外,plotly可以像excel那样进行交互式制图,在https://plot.ly/feed 点击make a plot,就会进入plotly在线绘图编辑工作台,如图:
在Grid1下边的表格中可以输入数据,在左边可以进行图形类型、变量选取,以及图形修饰等等工作,其中style就是对图形的图层、图例、标题、坐标轴等等内容的互动式美化;analysis则是对图形进行一些统计检验与分析,比如描述性统计、t检验、卡方检验、线性拟合、移动平均等等;JSON则是一些图形要素的json数据展示。在登陆的情况下,将绘制图形保存后,可以进行导出与分享,分享之后你就可以看到不同软件api的代码。下图就是使用style的功能对绘制完成的图形进行(trace、title等方面)美化。
另外 ,可以看到图中有个上方一行import按钮,点击进入,可以从这个按钮中导入excel、csv、SQL、URL等储存方式的数据。
(二)关于Plotly的python使用
在Plotly网站,点击Python软件类型选择件就可以进入专门使用python的主页(https://plot.ly/python/):
左侧一列是导航,包含如何开始使用,使用说明,离线使用以及于其他库结合使用,还有例子,正文中下边就是各种图形,需要用哪种图形就可以点击进去寻找代码。特别说明的是:Plotly需要注册之后,并将注册名与密码放入代码里才能使用。
在Python使用plotly,首先要安装plotly库,在Plotly——getting start里有说明:
安装方法
pip install plotly 或者 sudo pip install plotly
需要升级的话,可以输入:
pip install plotly –upgrade
注册,在python交互环境下运行以下初始化命令,生成认证的安全文件 .plotly/.credentials。
py = plotly.plotly("Username", "API-Key")
(三)Plotly for python 的案例
Plotly for python 的案例,目前网上已有很多人分享,在这里不再赘述。在这里只是以一个简单案例介绍Plotly for python 的一些隐藏功能。以散点图为例:
import plotly.plotly as py import plotly.graph_objs as go # Create random data with numpy import numpy as np N = 100 random_x = np.linspace(0, 1, N) #建立0与1之间的等差数,1
random_y0 = np.random.randn(N)+5 #均值为5的正态分布随机数
random_y1 = np.random.randn(N) random_y2 = np.random.randn(N)-5#均值为-5的正态分布随机数 # Create traces trace0 = go.Scatter( x = random_x, y = random_y0, mode = 'markers', name = 'markers') #构造散点图线条1 trace1 = go.Scatter( x = random_x, y = random_y1, mode = 'lines+markers', name = 'lines+markers') trace2 = go.Scatter( x = random_x, y = random_y2, mode = 'lines', name = 'lines') data = [trace0, trace1, trace2] py.iplot(data, filename='scatter-mode')
生成图形如下:
这就是三条不同的线条,一条是点,一条是点+线,一条是线;从这个案例我们可以看出:
(1)plotly是以图中每一个元素作为一个函数进行设置的,而不是像matplotlib放在一个大函数下统一进行参数设置;如本例中的trace0、trace1、trace2,在里边也可以设置其图形形状(mode)、图例(name)的值;
(2)出来的图形是交互式的,还可以进行选择以及再编辑,如图右上角是图形范围操作的一些按钮,右下角是进入在线编辑工作台的按钮;
(3)进入在线编辑工作台后,出现如图2类似的界面,这时候可以对图形进一步美化,比如加背景,标题、坐标轴等等,有很多类似的操作,但在这里要注意有的操作是免费的,有的操作是要付费才能使用的。
(4)再做一些修改之后,在登陆的情况下,保存修改后的图形,然后在个人主页上的my profile中点击view就可以预览你所制作的图形,此时你所手动操作的一些修饰也会以代码的形式展示出来,并且是以不同R、python、matlab等软件展示出来,当你不会以输入代码的形式进行图形美化的时候,这种方式会给你以提示!!
(5)可以将你的图形以pdf、ppt、png等等格式下载下来,可以将数据下载到csv、sql等储存中,也可以将你的图形在facebook、推特、github等等地方分享,如果你有账号的话。。。
如图,我在plotly工作台上给图形加了一个大标题以及背景之后;
在code-python下会自动看到我的手动操作对应的python代码
data = Data([trace1, trace2, trace3]) layout = { "font": {"size": 13}, "paper_bgcolor": "rgb(188, 189, 34)", "plot_bgcolor": "rgb(255, 255, 255)", "title": "zjying scatter", "titlefont": { "color": "rgb(68, 68, 68)", "size": 21 }, "xaxis": { "autorange": True, "range": [-0.062925170068, 1.06292517007], "type": "linear" }, "yaxis": { "autorange": True, "range": [-9.28642456481, 8.63397900633], "type": "linear" } } fig = Figure(data=data, layout=layout) plot_url = py.plot(fig)
另外,plotly还可以对接pandas包,可以通过pandas的pd.read_csv()命令导入csv格式数据。
总之,从以上一个小小案例,可以看到plotly的强大之处,在于无时无刻不交互——对接各种绘图软件、数据库,可以像excel一样对图形进行编辑,可以线上分享也可以学习各种各样的个人定制图表,可以下载成各种常用的输出形式。不过由于plotly是国外网站,网站打开速度有时候会慢,另外,免费版本的potly功能有的地方一些限制,但是能满足一般需求。
转自:https://mp.weixin.qq.com/s?__biz=MzI5NDY1MjQzNA==&mid=2247485614&idx=1&sn=f316be01c3acbd60edb3d669c43794ee&chksm=ec5ed7d3db295ec52ae0c9904ffe7557db2d15b9f8a5715a5add2095be2be2fb4ed4124c015d&mpshare=1&scene=23&srcid=0213eyTTHIj5kEnAyI5pZO8k#rd