Introducción a Plotly

Contenido

Introducción

Plotly es un sistema de código abierto que contiene librerías para generar gráficos. En el presente post me voy a centrar en la librería para Python, pero también se puede utilizar en Matlab, R y JavaScript. Toda la información sobre Plotly lo puedes encontrar en este enlace.

En el caso de Python, lo primero que hay que hacer es instalar la libreria, para ello lo que hay que hacer es bien simple. Se abre una ventana de comandos y se teclea la siguiente instrucción:

pip install plotly

Para actualizarlo habría que ejecutar la siguiente instrucción:

pip install plotly –upgrade

Como ya se ha dicho anteriormente, la libreria es libre pero eso sí hay que darse de alta y obtener un api-key para poder obtener gráficos. Los gráficos se almacenan en la nuve y existen diferentes versiones de esta librería que dependen de la cuenta con la que se esté operando. Las diferentes veriones de compra o uso se pueden ver haciendo clic en este enlace.

Para registrase hay que ir a este enlace y después de hacer correctamente el registro, se genera un api-key que será el que hay que usar para poder generar gráficos. La versión gratuita permite almacenar 25 gráficos, pero a efectos didácticos con esa versión versión vale para ejecutar el código que se va a mostrat en este post.

Lo primero que es preciso hacer antes de comenzar a usar esta librería es generar las credenciales para poder utilizarla. Esto se consigue ejecutando las siguientes sentencias de código:

import plotly
plotly.tools.set_credentials_file(username='XXXXXXX', api_key='XXXXXXXX')

En una aplicación real de este código habría que poner el usuario y el api_key que corresponda en cada caso.

Con la sentencia anterior se ha generado un fichero en “.plotly/.credentials” que contiene la información precisa para una identificación adecuada a la hora de generar los gráficos.

Ahora bien, si no quieres darte de alta el Plotly como se ha indicado anteriormente, también existe la posibilidad de trabajar en modo local, en cuyo caso se generará un fichero en formato html con instrucciones correspondientes para poder visualizar el gráfico. Este metodo se verá en el último apartado.

Para obtener ayuda sobre esta herramienta, se puede utilizar la siguiente instrucción:

import plotly.plotly as py
help(py.plot)
Help on function plot in module plotly.plotly.plotly:

plot(figure_or_data, validate=True, **plot_options)
    Create a unique url for this plot in Plotly and optionally open url.
    
    plot_options keyword arguments:
    filename (string) -- the name that will be associated with this figure
    fileopt ('new' | 'overwrite' | 'extend' | 'append') -- 'new' creates a
        'new': create a new, unique url for this plot
        'overwrite': overwrite the file associated with `filename` with this
        'extend': add additional numbers (data) to existing traces
        'append': add additional traces to existing data lists
    auto_open (default=True) -- Toggle browser options
        True: open this plot in a new browser tab
        False: do not open plot in the browser, but do return the unique url
    sharing ('public' | 'private' | 'secret') -- Toggle who can view this
                                                  graph
        - 'public': Anyone can view this graph. It will appear in your profile
                    and can appear in search engines. You do not need to be
                    logged in to Plotly to view this chart.
        - 'private': Only you can view this plot. It will not appear in the
                     Plotly feed, your profile, or search engines. You must be
                     logged in to Plotly to view this graph. You can privately
                     share this graph with other Plotly users in your online
                     Plotly account and they will need to be logged in to
                     view this plot.
        - 'secret': Anyone with this secret link can view this chart. It will
                    not appear in the Plotly feed, your profile, or search
                    engines. If it is embedded inside a webpage or an IPython
                    notebook, anybody who is viewing that page will be able to
                    view the graph. You do not need to be logged in to view
                    this plot.
    world_readable (default=True) -- Deprecated: use "sharing".
                                     Make this figure private/public
print("La versión de plotly utilizada es: ",plotly.__version__)
La versión de plotly utilizada es:  3.2.1

Un primer gráfico a modo de ejemplo, y para entrar en materia, sería el que se ve a continuación.

import plotly.plotly as py
import plotly.graph_objs as go

trace0 = go.Scatter(
    x=[1, 2, 3, 4],
    y=[10, 15, 13, 17]
)
trace1 = go.Scatter(
    x=[1, 2, 3, 4],
    y=[16, 5, 11, 9]
)
data = [trace0, trace1]

py.iplot(data, filename = 'basic-line')

La página web de plotly viene con un montón de ejmplos, todos ellos muy explicativos, por lo que se invita al lector que acuda a dicha página web y vea cómo generar gráficos a medida de las necesidades del usuario. Aquí simplemente me voy a limitar a copiar el cídogo de un ejemplo, a fin de que el lector observe lo fácil que es generar gráficos con esta utilidad.

# Learn about API authentication here: https://plot.ly/pandas/getting-started
# Find your api_key here: https://plot.ly/settings/api

import string
import pandas as pd
import numpy as np
import plotly.plotly as py
import plotly.graph_objs as go

N = 100
y_vals = {}
for letter in list(string.ascii_uppercase):
     y_vals[letter] = np.random.randn(N)+(3*np.random.randn())
        
df = pd.DataFrame(y_vals)
df.head()

data = []

for col in df.columns:
    data.append(  go.Box( y=df[col], name=col, showlegend=False ) )

data.append( go.Scatter( x = df.columns, y = df.mean(), mode='lines', name='mean' ) )

# IPython notebook
#  py.iplot(data, filename='pandas-box-plot')
py.iplot(data)

#url = py.plot(data, filename='pandas-box-plot')

Generación de tablas

A continuación me voy a centrar en la generación de tablas con esta librería. Las instrucciones necesarias para generar este tipo de elementos, las podemos encontrar en este enlace.

En lo que sigue se van a incluir algunos ejemplos que ayuden al lector a tomar una idea sobre las posibilidades que se tiene con esta librería.

import plotly.plotly as py
import plotly.graph_objs as go

traza=go.Table(
    header=dict(values=['Nombre','Edad','Ciudad'],
               fill=dict(color='#22313f'),
                font=dict(color='white')
               ),
    cells=dict(
        values=[['Francisco','Fernando','Julia','María'],
               [20,30,40,34],
                 ['Valladolid','Palencia','Madrid','Jaen']
               ],
        fill=dict(color='#e4f1fe')
        )
)

data = [traza] 
py.iplot(data, filename = 'tabla_basica')

Tablas con DataFrame

Veamos cómo poder generar una tabla utilizando un DataFrame generado con Pandas

import pandas as pd


column_names = ['mpg', 'cilindros', 'desplazamiento', 'potencia', 'peso', 
                'aceleracion', 'ano', 'origen', 'marca']
datos=pd.read_csv("http://mlr.cs.umass.edu/ml/machine-learning-databases/auto-mpg/auto-mpg.data",
                  delim_whitespace=True,header=None, names=column_names,na_values='?',
                 dtype={'marca':str})
#Limitamos los datos a mostrar

datos=datos[0:7]

datos
mpg cilindros desplazamiento potencia peso aceleracion ano origen marca
0 18.0 8 307.0 130.0 3504.0 12.0 70 1 chevrolet chevelle malibu
1 15.0 8 350.0 165.0 3693.0 11.5 70 1 buick skylark 320
2 18.0 8 318.0 150.0 3436.0 11.0 70 1 plymouth satellite
3 16.0 8 304.0 150.0 3433.0 12.0 70 1 amc rebel sst
4 17.0 8 302.0 140.0 3449.0 10.5 70 1 ford torino
5 15.0 8 429.0 198.0 4341.0 10.0 70 1 ford galaxie 500
6 14.0 8 454.0 220.0 4354.0 9.0 70 1 chevrolet impala
import plotly.plotly as py
import plotly.graph_objs as go

traza=go.Table(
    header=dict(values=["mpg","cilindros","desplazamiento","potencia","peso","año"],
                fill=dict(color="#0000FF"),
                align=['left']*7,
                font=dict(color='white')
               ),
    cells=dict(values=[datos.mpg,datos.cilindros,datos.desplazamiento,datos.potencia,
                      datos.peso,datos.ano],
               fill=dict(color="#A9E2F3"),
               align=['left']*7,
               format=[".1f","s",".1f",".1f",".1f","s"]
            )
)

data=[traza]
py.iplot(data,filename='tabla_pandas')

Plotly Offline

Como ya se ha indicado anteriormente, existe la posibilidad de trabajar sin conectarse con Plotly y por lo tanto en modo Offline. Cuando se trabaja de esta manera se genera un fichero en formato html que se guarda en local y se puede visualizar con un navegador, como cualquier otro fichero con código html.

A continuación se muestra ejemplo sobre cómo poder conseguir este resultado.

from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
import plotly.graph_objs as go
plot([go.Scatter(x=[2,3,5,6,8,10], y=[5,2,6,4,7,7])])
'file://H:\\MisCodigos\\web\\temp-plot.html'

Etiquetas de este post



Ayúdame a mantener este blog