plotly----比matplotlib更简单更美观的交互式绘图python库

时间:2024-03-22 20:59:10

1. plotly介绍

matplotlib是Python中最广为人知的图表绘制框架。但是它实在太复杂了,如果要画出较为漂亮的图,则需要付出很多的时间与精力。这次介绍一个Python下能轻松生成各种图表的框架plotly plotly是一个可交互,基于浏览器的绘图库,主打功能是绘制在线可交互的图表,所绘制出来的图表真的赏心悦目。它所支持的语言不只是Python,还支持诸如r,matlab,javescript等语言。plotly绘制的图能直接在jupyter中查看,也能保存为离线网页,或者保存在plot.ly云端服务器内,以便在线查看。

如果使用Python语言,建议用jupyter notebook或jupyterlab作为IDE, 在pycharm中使用plotly并不是一种很好的体验。

notice:我的系统是ubuntu16.04, 其他系统安装步骤望查看文末参考网站

2. 安装plotly

plotly的安装非常简单:


pip install plotly

Notice: 如果你只想使用plotly在线绘图功能,以下安装环节可略去不看

Jupyterlab support(python 3.5+)

如果只使用plotly在线版,上面一行命令就够了。但是,但是,我们画完图后肯定不想每次还要跳转到新的浏览器标签页查看,而是希望能在jupyter中直接查看,所以还需要配置一下jupyterlab支持。这需要使用pip安装jupyterlab以及ipywidgets

pip install jupyterlab==0.35 "ipywidgets>=7.2"

如果你的Python包管理器是conda:

conda install jupyterlab=0.35 "ipywidgets>=7.2"

当然,如果你之前已经安装过jupyterlab,那么可以在Python中查看相关库版本:

[1] import jupyterlab
[2] jupyterlab.__version__
[Output] '0.35.2'
[3] import ipywidgets
[4] ipywidgets.__version__
[Output] '7.4.2'

如果版本不满足相关要求,则升级一下jupyterlab

在安装好jupyterlab之后,安装一些要用到的jupyterlab 插件

注意,插件安装命令在linux与windows中有所不同

# 为避免"JavaScript heap out of memory"错误,首先在终端中输入如下命令
# (OS X/Linux)
export NODE_OPTIONS=--max-old-space-size=4096
# (Windows)
set NODE_OPTIONS=--max-old-space-size=4096

# Jupyter插件
jupyter labextension install @jupyter-widgets/[email protected] --no-build

# FigureWidget support
jupyter labextension install [email protected] --no-build

# 离线绘图插件
jupyter labextension install @jupyterlab/[email protected] --no-build

# JupyterLab chart editor 表格编辑器(这是可选项,非必须)
jupyter labextension install [email protected] --no-build

# Build extensions 安装插件
jupyter lab build

# 去除NODE_OPTIONS环境变量
# (OS X/Linux)
unset NODE_OPTIONS
# (Windows)
set NODE_OPTIONS=

图片导出工具安装

plot.ly支持导出静态图片。plotly.io包中提供了to_imagewrite_image两个函数实现相应功能。这需要先安装plotly提供的orca1命令行工具库及psutil Python包。

首先可以尝试使用

conda install -c plotly plotly-orca psutil

进行安装。

但是我使用上述命令安装orca的时候网速过慢,没法安装。

通过查看orca安装说明,其提供了多种安装途径。最后选择了使用npm2安装(这又是一个大坑)

nodejs相关安装
  • 安装nvm(不要直接安装nodejs,那样会安装到系统全局下,导致后续一堆关于用户权限的问题)

    curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.34.0/install.sh | bash

  • 安装输入如下命令,目的是让终端找到nvm环境变量,当然你也可以直接关闭重开一个新终端,就不用输入下列命令了

    source ~/.bashrc
    
  • 使用命令command -v nvm 如果输出nvm那么说明安装成功了

  • 使用nvm ls-remote可查看node所有版本

  • 通过 nvm install <版本号> 命令安装node

  • 安装完毕后,若node -v与’npm -v’能正常查看版本号,说明安装成功。

orca安装

在npm安装好后,不要急着安装orca。 还记得上面使用conda安装时遇到的国外源速度过慢问题么,npm默认源也是国外的,我们先将其换为国内源(不要问那为啥不换conda的镜像源,已经尝试过换成清华及我大肥科的,但依然没啥卵用,应该是没有收录)

  • 安装cnpm

    npm install -g cnpm --registry=https://registry.npm.taobao.org
    
  • 使用cnpm而非npm安装orca

    cnpm install -g [email protected] orca
    

    总算是看到丝滑流畅的安装过程了233.

  • 最后验证一下是否安装成功,在终端输入如下命令

    orca graph '{ "data": [{"y": [1,2,1]}] }' -o fig.png
    

    High five!

  • Last but not least

    如果你需要导出eps格式图片文件(latex写论文有时需要这样的图表),那么需要安装popplerinkscape

    #也许需要加上那个在需要请求帮助时会说出来的有魔力的词:)
    apt-get install poppler-utils
    apt-get install inkscape
    

3. 使用plotly

在线绘图

  • 首先注册一个plotly账号,在用户头像–setting–API Keys下生成API key

  • 在jupyterlab 中输入

    import plotly.plotly as py
    import plotly.graph_objs as go
    plotly.tools.set_credentials_file(username='your_name', api_key='your_keys')
    
    trace0 = go.Scatter(
        x=[1, 2, 3, 4],
        y=[10, 15, 13, 17]
    )
    trace1 = go.Scatter(
        x=[1, 2, 3, 4],
        y=[16, 5, 11, 9]
    )
    data = [trace0, trace1]
    
    py.plot(data, filename = 'basic-line', auto_open=True)
    

    输出一行提示语及一个网址,这时浏览器会自动跳转到该网页

    High five! You successfully sent some data to your account on plotly. View your plot in your browser at https://plot.ly/~cookiegg/0 or inside your plot.ly account where it is named 'basic-line'
    
    'https://plot.ly/~cookiegg/0'
    

    该网页上输出图(在网页上该图是可以交互的):

    plotly----比matplotlib更简单更美观的交互式绘图python库

    离线绘图

    网页输出式绘图

    plotly提供了每个绘图函数的离线版本。

    import plotly
    import plotly.graph_objs as go
    
    plotly.offline.plot({
        "data": [go.Scatter(x=[1, 2, 3, 4], y=[4, 3, 2, 1])],
        "layout": go.Layout(title="hello world")
    }, auto_open=True)
    

    使用plotly.offline.plot可生成离线网页图片,如上述代码片段输出结果:

    'file:/path/to/temp-plot.html'
    

    使用浏览器即可打开该网页。

    但这样的离线绘图模式显得非常麻烦,plotly提供了在jupyterlab环境中显示可交互图表的方法。

    jupyter 中实时输出

    plotly.offline.iplot函数可在jupyter中内嵌显示plotly交互式图表,只需要在jupyter notebook开头写入plotly.offline.init_notebook_mode(connected=True)即可:

    import plotly
    import plotly.graph_objs as go
    
    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")
    })
    

    plotly----比matplotlib更简单更美观的交互式绘图python库

    输出静态图片

    plotly.py 支持静态图片输出。plotly.io.to_image能将plotly 图表转为静态图

    import plotly.graph_objs as go
    import plotly.io as pio
    
    trace1 = [go.Scatter(x=[1,2,3], y=[4,5,6], marker={'color': 'red', 'symbol': 104, 'size': 10}, 
                        mode="markers+lines",  text=["one","two","three"], name='1st Trace')]
                                                   
    layout=go.Layout(title="First Plot", xaxis={'title':'x1'}, yaxis={'title':'x2'})
    figure=go.Figure(data=trace1,layout=layout)
    
    static_image_bytes = pio.to_image(figure, format='png')
    
    from IPython.display import Image
    Image(static_image_bytes)
    

    如果要保存静态图片,plotly.io.write_image能将图片转为包括png,jpg,pdf,svg,eps在内的多种格式。

TODO: 在使用plotly一段时间后会写一篇深入一些的使用介绍,Just let it be.


  1. https://github.com/plotly/orca ↩︎

  2. https://github.com/creationix/nvm ↩︎