Introduction plotly

Germain Salvato-Vallverdu germain.vallverdu@univ-pau.fr

Ce notebook est une très courte introduction à plotly. Quelques liens utiles :

Important : Par défaut plotly communique avec ses serveurs pour proposer des sercices collaboratifs et d'intégrations web. Pour éviter, si besoin, se passage par les serveurs plotly, il faudra penser à utiliser le mode offline.

Chargement de plotly


In [1]:
import plotly
import plotly.graph_objs as go
import numpy as np
# mode offline
plotly.offline.init_notebook_mode()


Définition des fonctions

On va tracer la fonction $S(t)$ et son envelope :

$$ S(t) = \sin(2\,t) \,e^{-0.04\, t} $$

In [2]:
def signal(t):
    return np.sin(2 * t) * np.exp(-4e-2 * t)
def envelope(t):
    return np.exp(-4e-2 * t)

Un premier graphique

  • Chaque courbe est une trace
  • Une figure contient des données Data et un Layout
  • Les Data sont des listes de trace
  • L'ensemble des objets de plotly fonctionne avec une syntaxe clef=valeur

In [3]:
t = np.linspace(0, 80, 200)
trace = go.Scatter(
    x = t,
    y = signal(t),
)
data = go.Data([trace])
plotly.offline.iplot(data)
plotly.plotly.image.save_as(data, "/Users/gvallver/git/python_sciences/plotly/graph1.png")


On ajoute l'envelope

Il faut ajouter des traces :


In [4]:
t = np.linspace(0, 80, 200)
trace = go.Scatter(
    x = t,
    y = signal(t)
)
envp = go.Scatter(
    x = t,
    y = envelope(t),
    line = go.Line(
        color = "red",
        dash = "dash"
    )
)
envm = go.Scatter(
    x = t,
    y = -envelope(t),
    line = go.Line(
        color = "red",
        dash = "dash"
    )
)
data = go.Data([trace, envp, envm])
plotly.offline.iplot(data)
plotly.plotly.image.save_as(data, "/Users/gvallver/git/python_sciences/plotly/graph2.png")


 On ajoute des informations

On ajoute un layout.


In [5]:
t = np.linspace(0, 80, 200)
trace = go.Scatter(
    x = t,
    y = signal(t)
)
envp = go.Scatter(
    x = t,
    y = envelope(t),
    line = go.Line(
        color = "red",
        dash = "dash"
    )
)
envm = go.Scatter(
    x = t,
    y = -envelope(t),
    line = go.Line(
        color = "red",
        dash = "dash"
    )
)
# on regroupe les traces dans l'objet Data
data = go.Data([trace, envp, envm])
# on s'occupe de la mise en forme globale via le Layout
layout = go.Layout(
    title = "Ma super fonction amortie",
    xaxis = go.XAxis(
        title = "temps (s)"
    ),
    yaxis = go.YAxis(
        title = "Signal (ua)"
    )
)
# la figure est un objet Data + un objet Layout
figure = go.Figure(data=data, layout=layout)
plotly.offline.iplot(figure)
plotly.plotly.image.save_as(figure, "/Users/gvallver/git/python_sciences/plotly/graph3.png")


Et la légende ?

Il suffit de donner les noms, vous avez du remarquer que la légende est déjà présente par défaut.


In [6]:
t = np.linspace(0, 80, 200)
trace = go.Scatter(
    x = t,
    y = signal(t),
    name = "signal"  # nom de la trace
)
envp = go.Scatter(
    x = t,
    y = envelope(t),
    name = "envelope",  # nom de la trace
    line = go.Line(
        color = "red",
        dash = "dash"
    )
)
envm = go.Scatter(
    x = t,
    y = -envelope(t),
    showlegend = False,
    line = go.Line(
        color = "red",
        dash = "dash"
    )
)
data = go.Data([trace, envp, envm])
layout = go.Layout(
    title = "Ma super fonction amortie",
    xaxis = go.XAxis(
        title = "temps (s)"
    ),
    yaxis = go.YAxis(
        title = "Signal (ua)"
    )
)
figure = go.Figure(data=data, layout=layout)
plotly.offline.iplot(figure)
plotly.plotly.image.save_as(figure, "/Users/gvallver/git/python_sciences/plotly/graph4.png")


Échelle des axes

L'échelle des axes est définie dans le Layout via les objets XAxis et YAxis. Dans plotly chaque élément du graphique a un objet qui lui est propre qui se trouve dans plotly.graphical_objs.


In [7]:
t = np.linspace(0, 80, 200)
trace = go.Scatter(
    x = t,
    y = signal(t),
    name = "signal"
)
envp = go.Scatter(
    x = t,
    y = envelope(t),
    name = "envelope",
    line = go.Line(
        color = "red",
        dash = "dash"
    )
)
envm = go.Scatter(
    x = t,
    y = -envelope(t),
    showlegend = False,
    line = go.Line(
        color = "red",
        dash = "dash"
    )
)
data = go.Data([trace, envp, envm])
layout = go.Layout(
    title = "Ma super fonction amortie",
    xaxis = go.XAxis(
        title = "temps (s)",
        range = [0, 40]
    ),
    yaxis = go.YAxis(
        title = "Signal (ua)",
        range = [-1.2, 1.5]
    )
)
figure = go.Figure(data=data, layout=layout)
plotly.offline.iplot(figure)
plotly.plotly.image.save_as(figure, "/Users/gvallver/git/python_sciences/plotly/graph5.png")


Conclusion

En conclusion : à vous de jouer et comme pour matplotlib, rendez-vous sur la la galerie.