python 可视化大屏幕_Python 数据可视化:Plotly 初体验

前面学习的可视化工具,所绘制的图都是发布到本地的。如果别人想看,有两种方法:一种是跑到自己的计算机这边来看;另一种是导出图片发给对方。在当今网络如此发达的时代,还用这种古代的方式传播信息,的确有点太不上档次了。

如果读者在这之前已经意识到问题了,说明你是一个善于发现问题的人。但这还不够,还要善于解决问题。当然,这个问题也不是今天才发现的,比如 Alex Johnson、Jack Parmer、Chris Parmer 和 Matthew Sundquist,他们早在大约 2013 年就意识到了,并且动手解决,于是 Plotly 诞生了(参考:维基百科)。

Plotly 解决了数据可视化作品的在线分享问题,这就是它的独特之处。

4.1.1 初始化

Plotly 的底层是 plotly.js,plotly.js 基于 D3.js、stack.gl 和 SVG,能够用 JS 在网页上实现类似 Matlab 和 Matplotlib 的图形。Plotly 提供了 Python、Matlab、R 语言等 API。

Plotly 原本是收费的,自 2016 年 6 月开始,提供免费的社区版。

如果要使用它,首先要在网站官方网站 https://plot.ly/ 注册账号,然后就可以在线发布绘制的图示了。

enter image description here

登录网站之后,在用户个人信息中的下拉菜单选择“setting”项目,进入下面的界面。

image

记录下自己的 Username 和 API KEY(可以重置),这样就做好了在线账号设置工作。

下一步就是要在本地安装 Plotly,在本课程第 0-3 课中已经介绍过,如果尚未安装,请用如下指令:

pip3 install plotly

安装完毕,进行在线账号初始化。

import plotly

plotly.tools.set_credentials_file(username="your_username", api_key='your_apikey')

这步操作如果成功,则不返回任何结果。初始化的结果是在本地生成了 ~/.plotly/.credentials 文件。

4.1.2 三种模式

完成初始化之后,就可以进行绘图,并实现在线分享。

import plotly.plotly as py

import plotly.graph_objs as go

t0 = go.Scatter(x = [1, 2, 3, 4],

y = [10, 15, 13, 17])

t1 = go.Scatter(x = [1, 2, 3, 4],

y = [16, 18, 13, 17])

data = [t0, t1]

py.plot(data, filename="example_image") #①

执行上述代码之后,会输出一个 URL:'https://plot.ly/~qiwsir/12'(每个人的 URL 会有所不同)。同时,会自动打开浏览器一个新标签,在那里会展现这个 URL 的页面内容,就是上述程序所绘制的图形。如果没有自动打开,可以把返回的 URL 复制到地址栏中访问此页面。

image

如果看到了此页面,就可以把 URL 分享给任何人,他们都能打开网页看到同样的图像。而且,因为这张图是基于 JavaScript 的,在手机那种小屏幕上看,也一样能够自适应。

惊喜还不止这些。 如果用鼠标点击图例,就会发现可以选择要显示的图线。另外,上面还有放大、截图、移动、下载、分享多个小工具等。

我们可以把 Plotly 的官方网站看做免费公开图示的托管网站,在里面可以看到很多高手发布的精美图示。每个用户在这里都有个人作品的专有页面,比如本教程作者的个人作品集:https://plot.ly/~qiwsir#/,打开之后会看到我个人发布的图示(很抱歉,没有好东西)。

enter image description here

图中标示了 filename,它所显示的就是 py.plot(data, filename="example_image") 中所设置的图示文件名称。

刚才生成的图示,直接发布到 plot.ly 上,把这种方式称为“在线模式”。与之相对,还有另外一种模式,不发布到该网站上,而是在本地生成一个 HTML 文件,并将图示置于其中,这种模式称为“离线模式”。操作如下:

import plotly

import plotly.graph_objs as go

plotly.offline.plot({"data": [go.Scatter(x=[1,2,3,4], y=[6,7,8,9])],

"layout": go.Layout(title="laoqi_third_image")},

auto_open = True)

执行之后,会返回 HTML 文件的地址,例如:'file:///Users/qiwsir/Documents/Projects/gitchat/data-visual/temp-plot.html',并且同时在浏览器中打开这个文件 auto_open = True。

在线模式或离线模式,都是要在新的浏览器地址打开。如果觉得这样的方式不方便调试,还可以使用第三种模式——嵌入模式。

plotly.offline.init_notebook_mode(connected=True)

plotly.offline.iplot({

"data": [go.Scatter(x=[1, 2, 3, 4], y=[4, 3, 2, 1])],

"layout": go.Layout(title="hello world")

})

执行之后,在当前代码的下面会插入下图所示(因为不同计算机的计算能力差异,有时候可能需要等几秒钟才能呈现图示):

image

效果貌似跟前面使用 Matplotlib 等差不多,但是这里插入的不是一张静态图片,而是跟“在线模式”或者“离线模式”一样的 H 前段代码(HTML + JS),同样具有交互功能。只不过,这种模式对于调试更便捷。

4.1.3 基本结构

在上述的制图代码中,主要是用 Plotly 提供的一些 API 完成绘图,这一点与以往的工具是一样的。区别就在于,这里还提供了一些基于网站 plot.ly 的 API,从而能够实现在线模式的制图。

如果对绘制图示的过程进行分析,可以将其概括为如下几部分。

1. API 函数

基于 Plotly 制图,不论是最后生成在线的还是本地的图示,都是按照如下流程。

向服务器的 API 提交数据和有关参数配置——以 JSON 格式。如果是生成本地图示,就提交给本地的 Plotly 程序并生成 HTML 文件;如果是生成在线图示,就是向 Plotly 服务器提交,并返回网址。

服务器接收到信息,验证正确后生成图示。

返回地址(可以是在线的 URL,也可以是本地 HTML 文件地址,或者插入到当前浏览器)。

以在线模式为例:

import plotly.plotly as py

用这种方式引入了 plotly.plotly 库,并更名为 py。这个库包含了与 Plotly 官方服务器相连接的函数,例如在线模式中的 ①(py.plot(data, filename="example_image"))所使用的函数 py.plot,其作用就是向 Plotly 官网提交有关绘图的数据,以及对图示的各种配置信息。服务器接受之后,会创建一个在线图示(唯一的一个 URL),默认自动打开。

plot(figure_or_data, validate=True, **plot_options)

常用参数见下。

figure_or_data:向 Plotly 官方网站提交的数据,通常以 JSON 组成的列表形式提交。

filename:图示的名称。

fileopt:文件保存模式,可选的模式(字符串)有以下几个选项。

new:新创建一个 URL。

overwrite:覆盖原有的同 filename 的图示。

extend:对已有图示的 traces 增加数据—— traces 是什么?继续阅读就能明白。

append:对已有图示的数据列表中追加 traces ——跟 extend 不同。假设已有图示的数据列表是 [trace1, trace2],append 的作用就是向这个列表中追加 trace,使其变成 [trace1, trace2, trace3]。

auto_open:默认 auto_open = True,即自动打开 URL。

sharing:设置 URL 的访问权限,可选值有以下几个。

'public':任何人都可以访问,并且显示在个人页面,允许 Plotly 搜索。

'private':只有发布者个人用户可以访问。

'secret':拥有此链接的人能够访问,但 Plotly 网站上不会展示,也不搜索此图。

除了此函数之外,类似的还有 plotly.offline.plot 和 plotly.offline.iplot,不同之处在于向本地的 Plotly 服务提交有关数据和图示的参数设置等。而后根据设置生成图示。

2. JSON 格式的数据

通过 Plotly 的 API 所提交的数据,可以有多种类型(对象)。

列表中的字典。 例如(使用嵌入模式,后续不特别说明,都以这种模式演示):

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值