Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Static and interactive figures are not rendered #277

Open
eurunuela opened this issue Jul 3, 2024 · 0 comments
Open

Static and interactive figures are not rendered #277

eurunuela opened this issue Jul 3, 2024 · 0 comments

Comments

@eurunuela
Copy link

I am trying to add a page to my docs with some examples that contain static and interactive (plotly) figures. However, after installing jupyter_sphinx and adding it to my config.py file, the code does not seem to be running and generating the figures.

I don't see any error messages related to this file when building the documentation, so I don't quite understand why it doesn't work. Could you please help me find a solution?

Here's my examples.md file.

# Examples

.. jupyter-kernel:: python3

.. jupyter-execute::
    :hide-code:

    import numpy as np
    import plotly.graph_objects as go
    import pandas as pd

    from pySPFM.deconvolution.hrf_generator import HRFMatrix
    from pySPFM.deconvolution.lars import solve_regularization_path
    import matplotlib.pyplot as plt

    n_scans = 760
    tr = 1

    noise_level = 1.5

    onsets = np.zeros(n_scans)

    hrf_generator = HRFMatrix(te=[0], block=False)
    hrf = hrf_generator.generate_hrf(tr=tr, n_scans=n_scans).hrf_

    onsets = np.zeros(n_scans)
    onsets[20:24] = 1
    onsets[50:64] = 1
    onsets[67:72] = 1
    onsets[101:124] = 1
    onsets[133:140] = 1
    onsets[311:324] = 1
    onsets[372:374] = 1
    onsets[420:424] = 1
    onsets[450:464] = 1
    onsets[467:472] = 1
    onsets[501:524] = 1
    onsets[550:564] = 1
    onsets[567:572] = 1
    onsets[601:624] = 1
    onsets[660:664] = 1
    onsets[701:714] = 1
    onsets[730:744] = 1

    data_clean = np.dot(hrf, onsets)
    data = data_clean + np.random.normal(0, noise_level, data_clean.shape)
    data_spc = (data - np.mean(data))/np.mean(data)
    data_spc = data_spc/np.sqrt(np.sum(data_spc**2, axis=0))

    plt.figure(figsize=(15,5))
    plt.plot(data_spc, label="Simulated")
    plt.plot(onsets*0.1, label="Onsets")
    plt.tight_layout()
    plt.xlabel("Time (s)")
    plt.ylabel("Amplitude (psc)")

.. jupyter-execute::
    :hide-code:

    _, lambda_opt, coef_path, lambdas = solve_regularization_path(hrf, data_spc, n_scans)
    df = pd.DataFrame(coef_path)
    df["Time"] = np.arange(0, n_scans, 1)
    df["Lambdas"] = lambdas

    lambda_opt_id = np.where(lambdas == lambda_opt)[0][0]
    df_clean = pd.DataFrame()
    df_clean["Data"] = data_clean*0.01
    df_clean["Time"] = np.arange(0, n_scans, 1)


    # Estimates figure
    fig = go.Figure()

    # Add traces, one for each slider step
    for step in np.arange(0, n_scans, 1):
        fig.add_trace(
            go.Scatter(visible=False,
                    line=dict(color="blue", width=1),
                    name=f"Lambda = {lambdas[step]}",
                    x=np.arange(0, n_scans, 1),
                    y=coef_path[:, step]
                    )
        )
        
    fig.data[lambda_opt_id].visible = True

    # Create and add slider
    steps = []
    for i in range(len(fig.data)):
        step = dict(
            method="update",
            args=[{"visible": [False] * len(fig.data)},
                {"title": f"Estimates with lambda = {lambdas[i]}"}],
        )
        step["args"][0]["visible"][i] = True # Toggle i'th trace to "visible"
        steps.append(step)
        
    sliders = [dict(
        active = lambda_opt_id,
        currentvalue={"prefix": "Lambda: "},
        pad={"t": 50},
        steps=steps
    )]


    bold = go.Scatter(visible=True,
            line=dict(color="green", width=0.5),
            name="Simulated BOLD data",
            x=np.arange(0, n_scans, 1),
            y=data_clean*0.01
            )
    fig.add_trace(bold)

    fig.update_layout(
        sliders=sliders,
        xaxis=dict(title='Time (s)'),
        yaxis=dict(title='Amplitude'),
    )

    fig.show()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant