JupyterLab fig does not show. It shows blank result (but works fine on jupyternotebook)
Asked Answered
D

2

9

I am new to JupyterLab trying to learn.

When I try to plot a graph, it works fine on jupyter notebook, but does not show the result on jupyterlab. Can anyone help me with this?

Here are the codes below:

import pandas as pd
import pandas_datareader.data as web
import time
# import matplotlib.pyplot as plt
import datetime as dt
import plotly.graph_objects as go
import numpy as np
from matplotlib import style
# from matplotlib.widgets import EllipseSelector
from alpha_vantage.timeseries import TimeSeries

Here is the code for plotting below:

def candlestick(df):
    fig = go.Figure(data = [go.Candlestick(x = df["Date"], open = df["Open"], high = df["High"], low = df["Low"], close = df["Close"])])
    fig.show()

JupyterLab Result: Link to the image (JupyterLab)

JupyterNotebook Result: Link to the image (Jupyter Notebook)

I have updated both JupyterLab and Notebook to the latest version. I do not know what is causing JupyterLab to stop showing the figure.

Thank you for reading my post. Help would be greatly appreciated.

Note*

I did not include the parts for data reading (Stock OHLC values). It contains the API keys. I am sorry for inconvenience. Also, this is my second post on stack overflow. If this is not a well-written post, I am sorry. I will try to put more effort if it is possible. Thank you again for help.

Dagmar answered 16/10, 2019 at 7:34 Comment(1)
You got the %inline magic declared for matplotlib?Drily
L
5

TL;DR:

run the following and then restart your jupyter lab

jupyter labextension install @jupyterlab/plotly-extension

Start the lab with:

jupyter lab

Test with the following code:

import plotly.graph_objects as go
from alpha_vantage.timeseries import TimeSeries

def candlestick(df):
    fig = go.Figure(data = [go.Candlestick(x = df.index, open = df["1. open"], high = df["2. high"], low = df["3. low"], close = df["4. close"])])
    fig.show()

# preferable to save your key as an environment variable....
key = # key here

ts = TimeSeries(key = key, output_format = "pandas")
data_av_hist, meta_data_av_hist = ts.get_daily('AAPL')

candlestick(data_av_hist)

Note: Depending on system and installation of JupyterLab versus bare Jupyter, jlab may work instead of jupyter

Longer explanation:

Since this issue is with plotly and not matplotlib, you do NOT have to use the "inline magic" of:

%matplotlib inline

Each extension has to be installed to the jupyter lab, you can see the list with:

jupyter labextension list

For a more verbose explanation on another extension, please see related issue: jupyterlab interactive plot

Leisaleiser answered 16/10, 2019 at 17:13 Comment(4)
Wow this works really well. Thank you so much for the help.Dagmar
Sorry, this did not work for me. Any other solutions to use?Environment
@MANEESHMOHAN Install with jupyter labextension install plotlywidget in JupyterLab, otherwise just install Plotly.py and it will automatically work in Classic Notebooks. For more details - npmjs.com/package/jupyterlab-plotlyAdenoidectomy
Depending on system and installation of JupyterLab versus bare Jupyter, "jlab" may work instead of "jupyter"Ninny
P
0

Patrick Collins already gave the correct answer.

However, the current JupyterLab might not be supported by the extension, and for various reasons one might not be able to update the JupyterLab:

ValueError: The extension "@jupyterlab/plotly-extension" does not yet support the current version of JupyterLab.

In this condition a quick workaround would be to save the image and show it again:

from IPython.display import Image

fig.write_image("image.png")
Image(filename='image.png')

To get the write_image() method of Plotly to work, kaleido must be installed:

pip install -U kaleido

This is a full example (originally from Plotly) to test this workaround:

import os
import pandas as pd
import plotly.express as px

from IPython.display import Image

df = pd.DataFrame([
    dict(Task="Job A", Start='2009-01-01', Finish='2009-02-28', Resource="Alex"),
    dict(Task="Job B", Start='2009-03-05', Finish='2009-04-15', Resource="Alex"),
    dict(Task="Job C", Start='2009-02-20', Finish='2009-05-30', Resource="Max")
])

fig = px.timeline(df, x_start="Start", x_end="Finish", y="Resource", color="Resource")

if not os.path.exists("images"):
    os.mkdir("images")

fig.write_image("images/fig1.png")
Image(filename='images/fig1.png') 
Parnassian answered 7/12, 2021 at 9:44 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.