美文网首页python
plotly 4.0自来水公司通告(可视化python模块推荐)

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

作者: 栽生物坑里的信息汪 | 来源:发表于2019-07-21 22:09 被阅读84次

    序言

    虽然上次写了一个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

    相关文章

      网友评论

        本文标题:plotly 4.0自来水公司通告(可视化python模块推荐)

        本文链接:https://www.haomeiwen.com/subject/pypklctx.html