Mixing Plotly/ipywidgets to modify the x axis of a scatter plot

Question:

I want to mix Plotly with a dropdown widget, the idea being to make some scatter plots and modify the x axis through the widget. Let’s say that my dataset is the following :

import sea born as sns
import plotly.graph_objects as go
import pandas as pd
import ipywidgets as widgets
import seaborn as sns
df = sns.load_dataset('diamonds')

And my target is the column carat. What I tried so far is to create the scatters, include them into the widget and display it :

predictors = df.columns.tolist()
predictors.remove("carat")
target = df["carat"]

data = []
for predictor in predictors:
    chart = go.Scatter(x = df[predictor],
                  y = target,
                  mode="markers")
    fig = go.Figure(data=chart)
    data.append((predictor,fig))

widgets.Dropdown(options = [item[0] for item in data],
                       value = [item[0] for item in data][0],
                       description = "Select :",
                       disabled=False)

Yet, I am new to ipywidgets/plotly and don’t understand what is not working here, since it displays the widget but not the charts even when I change its value. How can I modify the code so that it finally displays the charts when selecting a predictor ?

Asked By: GaëtanLF

||

Answers:

You can use interact to read the values from the DropDown and plot your graph:

import plotly.graph_objects as go
import pandas as pd
import seaborn as sns
from ipywidgets import widgets
from ipywidgets import interact
import plotly.express as px

df = sns.load_dataset('diamonds')
predictors = df.columns.tolist()
predictors.remove("carat")
target = df["carat"]

@interact
def read_values(
    predictor=widgets.Dropdown(
        description="Select :", value="clarity", options=predictors
    )
):

    fig = px.scatter(df, x = predictor, y = target)
    go.FigureWidget(fig.to_dict()).show()

enter image description here

Answered By: Hamzah
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.