plotly.offline.iplot在Jupyter Notebook/Lab中输出一个大的空白区域。

35
我正在尝试在Jupyter笔记本中创建桑基图,基于此处第一个示例的代码。
最终我得到了如下代码,并且可以正常运行,没有出现任何错误:
import numpy as npy
import pandas as pd
import plotly as ply

ply.offline.init_notebook_mode(connected=True)

df = pd.read_csv('C:\\Users\\a245401\\Desktop\\Test.csv',sep=';')

print(df.head())
print(ply.__version__)

data_trace = dict(
    type='sankey',
    domain = dict(
      x =  [0,1],
      y =  [0,1]
    ),
    orientation = "h",
    valueformat = ".0f",
    node = dict(
      pad = 10,
      thickness = 30,
      line = dict(
        color = "black",
        width = 0.5
      ),
      label =  df['Node, Label'].dropna(axis=0, how='any'),
      color = df['Color']
    ),
    link = dict(
      source = df['Source'].dropna(axis=0, how='any'),
      target = df['Target'].dropna(axis=0, how='any'),
      value = df['Value'].dropna(axis=0, how='any'),
  )
)
print(data_trace)

layout =  dict(
    title = "Test",
    height = 772,
    width = 950,
    font = dict(
      size = 10
    ),    
)
print(layout)

fig = dict(data=[data_trace], layout=layout)
ply.offline.iplot(fig, filename='Test')

CSV文件长这样:

Source;Target;Value;Color;Node, Label
0;2;2958.5;#262C46;Test 1
0;2;236.7;#262C46;Test 2
0;2;1033.4;#262C46;Test 3
0;2;58.8;#262C46;Test 4
0;2;5.2;#262C46;Test 5
0;2;9.4;#262C46;Test 6
0;2;3.4;#262C46;Test 7

看起来这个程序运行良好,各种输出一开始看起来都很正常,但是最终的输出结果从ply.offline.iplot(fig, filename='Test')只显示了一个大的空白区域: enter image description here 在笔记本中所有单元格都运行后,终端窗口如下所示: enter image description here 请问有人能指导我出错的地方在哪里吗?
编辑:我也在Plotly论坛上发布了这个问题:https://community.plot.ly/t/no-output-from-plotly-offline-iplot/8086 -

我认为你正在使用笔记本电脑。也许你需要像这样的%matplotlib inline,但是针对plotly包。 - Beyhan Gul
你能否检查一下启动笔记本的终端是否有任何错误消息或警告? - elz
1
哦,用处不太大。你的代码为我生成了一张图片,但我以前在 Jupyter 中使用离线绘图库 plotly 时遇到过类似的问题——有时候出现图形消失的情况令人惊讶且不一致。也许值得尝试增加数据速率限制,例如 jupyter notebook --NotebookApp.iopub_data_rate_limit=1.0e10 - elz
@elphz 谢谢。我可能会尝试在我的私人电脑上做同样的事情,以避免愚蠢的公司防火墙,这样我就可以看到是否在不使用plotly.offline时它能否正常工作。 - eirikdaude
@elphz 增加数据传输速率限制似乎已经解决了问题 - 如果您想将此放入答案中,我会授予您奖励。 - eirikdaude
显示剩余4条评论
14个回答

27

我曾经在Jupyter中使用Plotly离线时遇到过类似的问题 - 有时候图表无法显示的原因和时间是出乎意料的不一致。也许值得尝试的是增加数据速率限制。

jupyter notebook --NotebookApp.iopub_data_rate_limit=1.0e10


5
我在Jupyter Lab中遇到了这个问题。当我切换到笔记本应用程序时,这个建议对我有帮助。是否有一种方法可以通过Jupyter Lab来设置此参数? - Michael Szczepaniak
@MichaelSzczepaniak,你在Jupyter Lab中找到解决方法了吗? - Bhaskar Dhariyal

17

我尝试了这里提供的所有解决方案,但它们都没有对我起作用。解决问题的方法是添加:

import plotly.io as pio
pio.renderers.default='notebook'

还要使用fig.show("notebook"),而不是仅使用fig.show(),如此处所建议这里


12

对我来说,把笔记本更改为可信(这启用了JavaScript,并使plotly能够将图形构建到jupyter笔记本中)有所帮助。

您可以在此处找到此选项:

在笔记本的右上方


1
谢谢,这个可行。不过我想知道为什么,因为在同一台笔记本电脑上“不受信任”时它也能工作。 - Idodo

3
在使用Google Colab时,请包含以下代码片段 -
import plotly.io as pio
pio.renderers.default = 'colab'

或者使用总体导入语句 -
import plotly.offline as py
py.init_notebook_mode(connected=True)
import plotly.graph_objs as go
import plotly.io as pio
pio.renderers.default = 'colab'
from plotly.offline import init_notebook_mode, iplot

这将设置渲染为Colab样式并显示绘图。

希望这有所帮助。


2
最初的回答:使用 jupyter notebook 服务器(无需任何其他选项)可以获得正确的显示,但是在使用 jupyter lab 服务器时出现了空白块。相关版本信息:
$ jupyter lab --version
0.35.5
$ jupyter notebook --version
5.7.8
$ python -c "import plotly; print(plotly.__version__)"
3.10.0

对于那些使用 JupyterLab 的人,为了能够正确显示离线的 plotly 图表,在 JupyterLab 中,我们需要使用以下命令安装 plotly-extension(以下摘自相关回答):

最初的回答:

$ jupyter labextension install @jupyterlab/plotly-extension
$ jupyter labextension list 
$ jupyter lab build

1
如果这些答案都没有帮到你,请尝试以下方法:在以管理员权限打开的conda提示符中执行以下操作。
pip install pip --upgrade
conda upgrade notebook or pip install notebook --upgrade

conda install -c conda-forge ipywidgets or pip install ipywidgets

您需要安装最新版本的 jupyter notebookipywidgets


1

我发现Jupyter Lab运行的环境(conda、pipenv等)和应该运行Plotly的内核环境都需要自己略微不同的依赖项。
对于我来说,以下内容适用于jupyterlab==3.5.3plotly==5.14.1

Jupyter Lab的环境:
jupyterlab==3.5.3 ipywidgets jupyter-dash nbformat

带有Plotly的内核环境:
plotly==5.14.1 ipywidgets jupyter-dash nbformat

此外,在安装所有依赖项后运行jupyter lab build,因为jupyter-dash需要它。

Jupyter Lab的环境似乎不需要plotly。请注意,这些依赖项列表是我可以确认有效的,但可能有几个依赖项可以省略。或者可能存在未列在此处的传递依赖项,这些依赖项实际上是所需的 - 我真的不知道。


1
我自己遇到了类似的问题,是在太阳图中。空白图是由于数据无效导致的。我本来期望在运行时会出现错误,但似乎在某些罕见情况下不会引发错误,而是显示一个空白图。
因此,请检查您的数据有效性,或者使用Plotly文档中提供的虚拟数据进行测试,以测试问题是否来自数据或Plotly/笔记本接口。

在 go.Figure(data=[go.Pie()]) 中也遇到了这个问题,重新检查了数据,你是正确的。 - Mehmet Burak Sayıcı

0

上述的一些方法对我没用。但是,最终根据这个讨论官方故障排除指南解决了这个问题。

  • 步骤1: 关闭你的Jupyter Lab。然后,卸载Plotly和一些扩展程序。
$ conda remove plotly
$ jupyter labextension uninstall jupyterlab-plotly
$ jupyter labextension uninstall plotlywidget

步骤2:在与JupyterLab启动的相同环境中打开终端,重新构建Jupyter Lab。
$ jupyter lab build

步骤 3:使用相同的版本重新安装 plotly 和 jupyter lab 扩展。
$ conda install plotly
$ jupyter labextension install jupyterlab-plotly
$ jupyter labextension install plotlywidget

以上程序在我的 jupyter lab 中运行良好。我认为我们可以尝试在 jupyter notebook 中使用相同的程序。

我遇到了这个问题,即在jupyter笔记本中内联的plotly图表可以打开,但在jupyter lab中无法打开。我该如何验证终端是否处于与启动jupyterlab相同的环境中? - TunaFishLies

0

我的回應可能有點晚,但除了 Plotly 之外,導入 plotly.graph 也很重要。

這些是你需要導入的套件。我也遇到了空白輸出的問題,這對我有用。

from plotly.offline import plot, iplot, init_notebook_mode
import plotly.graph_objs as go
init_notebook_mode(connected=True)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接