【问题标题】:Interactive matplotlib figures in Google ColabGoogle Colab 中的交互式 matplotlib 人物
【发布时间】:2019-03-22 10:25:21
【问题描述】:

通常在 jupyter 笔记本中,我会使用 %matplotlib notebook 魔法来显示交互式窗口,但这似乎不适用于 google colab。有没有解决办法,还是不能在google colab中显示交互式窗口?

【问题讨论】:

  • 我找到了这个issue。如果您查看问题中的最后一条评论,您会看到仅支持的 matplotlib 后端是 inline。原因是 x-forwarding 要求。
  • 这是有道理的,感谢您的链接。对于大多数需要绘图的目的,我一直在使用 mybinder.org 而不是 google colab。

标签: python matplotlib google-colaboratory


【解决方案1】:

面对同样的问题(经过大量阅读),我无法让 %matplotlib ipympl/widget 魔法与 Colab 一起工作。然而,下一个最佳解决方案确实是使用 Plotly,正如@Nilesh Ingle 在他的详细回复中所概述的那样。

但是,有一种更简单的方法可以在 Colab 中启动并运行 Plotly。

请参阅此shared Colab notebook 了解最小示例。

以下也复制了 Python 代码以供快速参考:

!pip install plotly

import plotly.express as px

SHEET_ID = '153pKW5IZRHwx9mLu_uU-hDSK0D3R19vR71EcgMYHn3I'

df = pd.read_csv('https://docs.google.com/spreadsheets/d/' + SHEET_ID + '/export?format=csv')

fig = px.scatter(data_frame=df, x="x", y="y", width=1000, height=800)
fig.show()

【讨论】:

    【解决方案2】:

    对 Nilesh Ingle 的精彩回答 https://stackoverflow.com/a/55435199/13705497 的一个小修正

    为了消除坐标轴和标题不显示的问题-您可以将链接https://cdn.plot.ly/plotly-1.5.1.min.js?noext(此链接是罪魁祸首)更改为https://cdn.plot.ly/plotly-latest.min.js?noext 在函数 configure_plotly_browser_state() 中。祝你有美好的一天!

    【讨论】:

    • 为什么这是一个解决方案? 1.5.1 有错误吗?也许更好的建议是确定修复此错误的特定版本?
    • @Glitcher 依赖特定版本是个好主意吗?使用最新的情节抽象不是需要决定一个合适的版本,从而使过程中的事情变得更容易吗?很想听听您对此的看法。
    • 当然,我不知道运行它的环境,但对于许多地方来说,更新库是只有在需要更新附带的新功能或修复时才应该做的事情。这是因为更新库存在固有风险。它可能会引入错误或可能无法考虑的重大更改。
    【解决方案3】:

    除了@Nilesh Ingle 优秀的答案,为了解决坐标轴和标题不显示的问题: 在函数configure_plotly_browser_state() 中调用脚本时,您应该将链接https://cdn.plot.ly/plotly-1.5.1.min.js?noext(指的是旧版本的plotly,因此不显示轴标签)更改为https://cdn.plot.ly/plotly-1.5.1.min.js?noext。 希望这会有所帮助!

    【讨论】:

      【解决方案4】:

      这似乎是一个后端问题。在 jupyter notebooks 中,列出不同类型后端的命令是:

      %matplotlib --list
      

      输出:

      Available matplotlib backends: ['tk', 'gtk', 'gtk3', 'wx', 'qt4', 'qt5', 'qt', 'osx', 'nbagg', 'notebook', 'agg', 'svg', 'pdf', 'ps', 'inline', 'ipympl', 'widget']
      

      但是,对于我的系统/设置,只有“笔记本”和其他一个有效。在 jupyter 实验室中,对我来说,没有一个后端适用于交互式图表(即使是他们推荐的“内联”)。

      希望它能减少我经历的安装/重新安装的搜索和排列时间:))

      【讨论】:

        【解决方案5】:

        以下是在 Plotly 中创建交互式 iplot() 和在 Google Colab Notebook 上创建 cufflinks() 的示例。使用过的功能和建议来自answer [12]

        关键似乎是在进行绘图的单元格中包含configure_plotly_browser_state()

        下面的代码应该可以工作:

        导入库

        import datetime
        from datetime import date
        import pandas as pd
        import numpy as np
        from plotly import __version__
        %matplotlib inline
        
        import plotly.offline as pyo
        import plotly.graph_objs as go
        from plotly.offline import iplot
        
        import cufflinks as cf
        from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot 
        
        
        cf.go_offline()
        

        将笔记本设置为 false

        init_notebook_mode(connected=False)
        

        为 Colab 创建函数 复制自: [12]

        def configure_plotly_browser_state():
          import IPython
          display(IPython.core.display.HTML('''
                <script src="/static/components/requirejs/require.js"></script>
                <script>
                  requirejs.config({
                    paths: {
                      base: '/static/base',
                      plotly: 'https://cdn.plot.ly/plotly-1.5.1.min.js?noext',
                    },
                  });
                </script>
                '''))
        

        创建示例数据框

        数据来源:来自美国国家气象局[3]的乔治亚州桃树市的年度降雨数据。

        df = pd.DataFrame({
            'month': ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
            'Year_2018': [3.26, 6.11, 4.86, 6.53, 4.45, 3.86, 8.04, 7.59, 1.48, 4.75, 7.27, 11.83],
            'Year_1996': [8.26, 3.82, 6.42, 2.91, 2.12, 1.70, 2.14, 4.66, 4.32, 0.89, 3.22, 4.14]
        }
        )
        df
        

        创建交互式 iplot

        configure_plotly_browser_state()
        df.iplot(kind='line',x='month',y=['Year_2018', 'Year_1996'], color=['white', 'gold'], 
        theme='solar', mode='markers+lines',title='Annual Rainfall in the city Peachtree City, GA')
        plt.show()
        

        输出:

        [注意:x、y、标题不显示!目前。]

        【讨论】:

        • 你知道为什么正确的标题没有出现,而是说“[Object Object]”吗?
        • 为了您的方便复制到colab.research.google.com/drive/…
        • 我很沮丧不得不使用 plotly 而不是 matplotlib,但这或多或少地实现了所需的功能,所以我会接受!
        • matplotlib 也可以在 Jupyter 笔记本中使用,但它不是交互式的,而 plotly 是。
        猜你喜欢
        • 2021-01-18
        • 2017-02-16
        • 2019-08-14
        • 1970-01-01
        • 2010-12-28
        • 2020-01-26
        • 2015-08-20
        • 2021-02-03
        • 2020-10-05
        相关资源
        最近更新 更多