plotly 4.0自来水公司通告(可视化python模块推荐)

序言

虽然上次写了一个plotly绘图说明的一篇文章,向大家介绍了一下plotly这个很好用的python的画交互式图/网页的库,但时代毕竟在变化,最近在我再次上plotly的官网准备查看官方文档的时候,竟然惊喜的发现,plotly竟然在不知不觉中升级到了4.0的版本,要知道,版本号的更迭都有其意义,像这种最大位数上的数字的变化,绝对是很大的一次调整。

所以作为一个plotly的attributor之一,我今天就来吹一波plotly的更新!!

正文

首先一上来的最大的改变自然是在python部分的plotly的首页

相比于之前的首页对不起这里找不到之前的首页,最显眼的自然就是Version 4 migration Guide。其实其实还有一个不是很显眼,但是其实后来发现十分十分重要的一个模块的增加,也就是plotly Express,这个模块后面会重点讲到划重点了划重点了

我们可以点进去Version 4 migration Guide里面,我们就可以知道一些比较重大的变化/迁移(mirgration)

所以在这里也可以毫不犹豫的说一声

plotly 4.0 重点就是在于改变了一些原来3.X版本下的冗余,算是大刀阔斧的砍掉了一些模块了

迁移

online版的plotly迁移到了chart-studio

不知道有没有读者在用plotly的online版的,反正我其实是没有用的,一方面是经常要处理的数据很大(我们单位网速又很抓马),另外一方面有时不付费的话只能使用非常有限的储存空间。而且再再加上我更喜欢写代码而不是交互式点击的方式去画图,所以online版跟我始终无缘。

但正如我上一篇里面提到的,plotly是一个跨平台的可以兼容多种语言的工具库,所以online版也无可厚非,一个愿打一个愿挨嘛,商品经济。
但是!!!我每次使用import plotly的时候真的很烦。。。为什么呢?

就是plotly的default选项是使用online版,所以如果你要使用offline的输出一些图片或者网页的话,要再加一层,也就是plotly.offline.plot。当然这也仅仅是加多几个字的原因,所以我也一直这么使用,但是plotly公司会考虑到这一点,然后把plotly这个名号全部让给了离线版,然后把online版的代码迁移到了chart-studio中去,真的就很大方以及很慷慨。这里再尬吹一波plotly的抉择,这样子想必会有更多的开源代码工作者愿意使用plotly作为自己的画图工具,从而达到提高知名度的效果!

offline版的迁移

网页中时这么说的Offline features (plotly.offline) replaced by Renderers framework & HTML export
其实有点令人看不懂,但大概的意思应该是抛弃了这个模块(虽然近几个版本以内应该还在),然后把输出图片或者网页的方法直接用figure这个实例的方法来代替,也就是figure.to_htmlfigure.write_html

这个也大大提高了使用时候的便捷,不用再麻烦的从plotly.ioimport一个write_images来输出图片了。

不过值得吐槽的是,通过orca的服务端来做网页到pdf的渲染,还是有些不稳定。但重新打开一下orca的服务器端就好了,所以也不算个大问题,所以一直也没有被解决。 orca的介绍在这里

plotly.tools.make_subplots迁移到plotly.subplots.make_subplots

新增了很多plotly的配色主题

新模块plotly-Express

终于到了介绍这个全新的模块的时候了!!这个也是我这次更新里很喜欢的一个语法糖 语法糖:特指没有什么实质作用,但会大幅度提高书写的或者使用的便捷度的语法

首先开头介绍一些这是个什么,简单的说,

plotly-Express就是通过简单的一个function替使用者便捷的画图的模块

同样功能的模块在别的绘图库中也非常的多,例如R中著名的ggplot,或者说python中matplotlib的著名高级库seaborn(要是很多人没听过,质疑这几个著名,本作者概不负责)

以下可以介绍几个例子(例子都是出自于plotly-Express的例子,这里我只是个搬运工和解读的角色)

自动化散点图的颜色

import plotly.express as px
iris = px.data.iris()
fig = px.scatter(iris, x="sepal_width", y="sepal_length", color="species")
fig.show()

这里导入了一个著名的数据集(鸢尾花),然后通过plotly.express,也就是我这次要讲到的plotly-express进行绘图。通过给定一个dataframe,然后通过指定列名就可以让该function自动帮助你进行绘图。

其中通过给color指定列名,就可以让plotly自动的根据该列的值,进行离散化的赋予颜色和组别。如果是原来的写法,就得按照下面这么写。

import plotly.graph_objects as go
fig = go.Figure()
for group in set(iris.loc[:,"species"]):
    sub_df = iris.loc[iris.loc[:,"species"==group],:]
    fig.add_scatter(x=sub_df.loc[:,"sepal_width"], y=sub_df.loc[:,"sepal_length"], name = group)
plotly.offline.iplot(fig)

并且,如果要指定颜色,还得自己辛苦的在循环中手动的去赋值,就很麻烦。但是现在的方法就简单了不少。

当然也带来了一些麻烦(毕竟麻烦和便利总是形影相随的),例如如果你的species的列是连续值,但它其实是离散的类别变量,那么首先你得手动的把该列转换为字符串。而不是整数/浮点数。

自动化散点图的左右常用子图

上面的例子其实也没有简化太多,但是这个例子就简单了很多。而且似乎也很经常需要画类似的图。

import plotly.express as px
iris = px.data.iris()
fig = px.scatter(iris, x="sepal_width", y="sepal_length", color="species", marginal_y="violin",
           marginal_x="box", trendline="ols")
fig.show()

同样地,这里用的是鸢尾花的数据集。除了再次自动赋予color以外,例子中还有两个特别的参数marginal_xmarginal_y。而且传递给它们的值也很奇怪,任何一个都不属于鸢尾花数据集中的列名,让我们先看看效果吧。

效果如上,就是一个经常使用的一个散点图外加两个子图,并且这两个子图的布局要与左下角的散点图保持很多的一致,例如共享x轴(上),共享y轴(右),而且还得在右上角保留一个小小的空白区域。
所以如果要画一个上面效果的图,要写的代码量还是挺多的。

但使用plotly.express就很好的增添了这么一个语法糖的模块,从而让画这样的图大大轻松。

ps:就算这个图在绘制的过程中出了点bug,但是这个构建好的图的layout也可以利用起来,可以把数据都删掉,然后通过指定layout的方式重新再一个布局好的图上进行绘图。

自动化的pairwise散点图

同上的,直接看代码吧

import plotly.express as px
iris = px.data.iris()
fig = px.scatter_matrix(iris, dimensions=["sepal_width", "sepal_length", "petal_width", "petal_length"], color="species")
fig.show()

这种pairwise的散点图之前在plotly上画起来也非常的困难,但其实在别的绘图模块里就比较常见。
例如seabornScatterplot Matrix
或者说基于ggplotggpairs

自动化的Sankey 图

接下来一个也是比较喜欢的一个图,因为曾经为了画这么一个图就辛苦的看文档然后纠结了很久。

import plotly.express as px
tips = px.data.tips()
fig = px.parallel_categories(tips, color="size", color_continuous_scale=px.colors.sequential.Inferno)
fig.show()
sankey plot demo

但通过这么简单的一个px.parallel_categories就可以简单的在一堆通过多个分类变量描述的样本中,用一个sankey plot去把分类变量之间的关系描述清楚。

添加动画控制(animation)

import plotly.express as px
gapminder = px.data.gapminder()
fig = px.scatter(gapminder, x="gdpPercap", y="lifeExp", animation_frame="year", animation_group="country",
           size="pop", color="continent", hover_name="country", facet_col="continent",
           log_x=True, size_max=45, range_x=[100,100000], range_y=[25,90])
fig.show()

交互式的网页的其中一个好处就是可以使用动画animation,但是plotly中的动画控制对于初学者来说就常常十分难以理解,我自己如非必要也不会去写这么一个动画控制,因为就非常的难写。虽然写好了以后也很难展示 因为很难给别人一个网页的结果,但从交流/展示上来说,就会非常的有意思。

  • 由于简书还不支持嵌入js,所以以下图只是静态图,建议到链接去看一下效果(:з」∠)

以上代码中通过animation_frame来初始化了一个slider从而达到了一个,拖动进度条就可以观察到不同年份的数据散点图的效果。

结语

数据可视化是个非常非常重要的展示的能力,数据往往只是一堆杂乱无章的数字,只有有效的组织、排序,才能把原来杂乱无章的数据,有序的很好的展现出来。而只有让别人看懂你的数据,才能让别人理解你的数据,所以可视化,非常非常重要,别人完全不知道你的数据的由来、设计、前因后果,所以企图让一个别人理解你的数据,只有好的可视化才能达到。

大家一起来学习可视化鸭~~~
下面的链接也放一些我收藏的对学习可视化很有帮助的网页。

参考链接

plotly 新增模块express
VisuAlgo - visualising data structures and algorithms through animation算法可视化
Visualizing Network Graphs — Bokeh 1.2.0 documentation
D3 / Observable
自定义地图 | 高德地图API

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容