Guía breve: Graficar datos en Python con Plotly (2024)
Introducción
Introducción a Plotly en Python
Como alguien que ha estado experimentando con la visualización de datos por un tiempo, he encontrado que comenzar con las herramientas correctas puede marcar una gran diferencia. Cuando descubrí Plotly para Python, lo que me llamó la atención fue cómo logra equilibrar la potencia con la simplicidad. Plotly es una biblioteca de gráficos de código abierto que permite crear gráficos interactivas y de calidad para publicación en línea.
Para empezar a usar Plotly en un entorno Python, lo primero que debes hacer es instalarlo.
!pip install plotly
Una vez instalado, puedes importar Plotly como cualquier otra biblioteca de Python. A diferencia de opciones más tradicionales como matplotlib, la fortaleza de Plotly está en su interactividad y compatibilidad web. Aquí tienes un ejemplo rápido que demuestra esto:
import plotly.express as px
# Vamos a plotear un gráfico de dispersión simple
df = px.data.iris() # Usando el dataset Iris
fig = px.scatter(df, x="sepal_width", y="sepal_length")
fig.show()
Ejecutar este código no produce solo una imagen estática. En su lugar, verás un gráfico interactivo donde puedes hacer zoom, desplazarte o pasar el ratón sobre los puntos para ver más información. Esta función es increíblemente útil cuando trabajas con grandes conjuntos de datos donde detectar tendencias y valores atípicos puede ser difícil.
Plotly también se integra maravillosamente con Pandas, la biblioteca de manipulación de datos por defecto en Python. Si tus datos están en un DataFrame, hacer gráficos puede ser lo más natural posible. Aquí tienes un ejemplo de cómo plotear una serie de tiempo desde un DataFrame:
import pandas as pd
import numpy as np
import plotly.express as px
# Crear un DataFrame simple
df = pd.DataFrame({'Date': pd.date_range(start='2024-01-01', periods=30),
'Value': np.random.randn(30).cumsum()})
# Plotea un gráfico de serie temporal
fig = px.line(df, x='Date', y='Value', title='Serie de Tiempo Aleatoria')
fig.show()
¿Qué no amar de la simplicidad aquí? Puedo personalizar un gráfico con un código mínimo, enfocándome más en la historia que estoy tratando de contar con mis datos, en lugar de perderme en una sintaxis compleja de ploteo.
Es importante señalar que Plotly no es solo una única herramienta. La biblioteca es expansiva, con Plotly Express siendo una interfaz de alto nivel que simplifica la creación de tipos comunes de gráficos. Plotly.graph_objects, por otro lado, te da más control y se usa típicamente para visualizaciones personalizadas o más intrincadas.
Para darte una idea de cómo funciona graph_objects, veamos un gráfico de barras:
from plotly.graph_objs import Bar, Layout
from plotly import offline
data = [Bar(x=['A', 'B', 'C'], y=[20, 14, 23])]
layout = Layout(title='Gráfico de Barras Simple',
xaxis=dict(title='Categoría'),
yaxis=dict(title='Valores'))
fig = dict(data=data, layout=layout)
offline.iplot(fig)
Usar graph_objects es un poco más detallado, pero abre un mundo de personalización que puede ser necesario para una narración visual más matizada.
Como alguien que aprecia la esencia de un diseño limpio y visualización interactiva, Plotly se ha convertido en una herramienta fundamental para mis necesidades de ploteo de datos. Es una herramienta que crece con tu habilidad. Ya sea que estés comenzando y necesites comprender tus datos, o que estés profundamente inmerso en el análisis de datos y necesites crear narrativas visuales detalladas e interactivas, Plotly ofrece un conjunto lo suficientemente diverso para tu viaje.
En resumen, comenzar con Plotly es simple, y la recompensa es enorme. Solo unas pocas líneas de código pueden proporcionar ideas que podrían tomar un esfuerzo considerable con herramientas menos interactivas. Y todos sabemos que, cuando se trata de datos, poder comprender y comunicar eficazmente es la mitad de la batalla ganada.
Creando tu Primer Gráfico con Plotly
Cuando comencé a trabajar con Plotly para visualizar datos, me impresionó lo sencillo y potente que era. Aquí te muestro cómo construí mi primer gráfico con Plotly, y espero que esto te ayude a comenzar con tu propia experiencia usando Plotly.
Necesitas tener Plotly instalado, así que si aún no lo has hecho, solo ejecuta:
pip install plotly
Ahora, a la parte divertida. Empecemos creando un gráfico de líneas simple. Usaremos el módulo graph_objs
de Plotly, que ofrece una forma sencilla de crear varios tipos de gráficos.
import plotly.graph_objs as go
import plotly.offline as pyo
# Datos de ejemplo para nuestro gráfico de líneas
x_data = [0, 1, 2, 3, 4]
y_data = [x ** 2 for x in x_data]
# Creamos un rastro, que en Plotly significa una serie de puntos de datos
trace = go.Scatter(
x = x_data,
y = y_data,
mode = 'lines',
name = 'cuadrática'
)
# Agrupamos el rastro en una lista - esto nos permitirá añadir más rastros después
data = [trace]
# Definimos el diseño de nuestro gráfico
layout = go.Layout(
title = 'Mi Primer Gráfico con Plotly',
)
# Combinamos nuestros datos y el diseño en una figura
figure = go.Figure(data=data, layout=layout)
# Mostramos la figura
pyo.plot(figure, filename='primer_grafico_plotly.html')
El código anterior configura un gráfico de líneas básico que traza los x_data contra el cuadrado de y. Nota que creamos un objeto llamado rastro o trace, que en la terminología de Plotly representa el conjunto de puntos que queremos trazar. Después de definir el rastro, lo agrupamos en una lista, lo cual será útil cuando desees trazar múltiples conjuntos de datos en el mismo gráfico.
Para visualizar nuestra figura, la combinamos con un diseño en go.Figure
, y luego se llama a la función pyo.plot()
para mostrar la figura en tu navegador web.
Aquí va otro ejemplo rápido - esta vez un gráfico de barras. La configuración es bastante similar al gráfico de líneas, pero usamos go.Bar
en su lugar.
# Datos de ejemplo para nuestro gráfico de barras
categorias = ['Manzanas', 'Naranjas', 'Peras', 'Uvas']
valores = [5, 10, 3, 7]
# Creamos un rastro para el gráfico de barras
trace = go.Bar(
x = categorias,
y = valores
)
# De nuevo, agrupamos el rastro en una lista
data = [trace]
# Usamos el mismo diseño que en el gráfico de líneas por consistencia
layout = go.Layout(
title = 'Mi Primer Gráfico de Barras con Plotly',
)
# Creamos una figura y la mostramos
figure = go.Figure(data=data, layout=layout)
pyo.plot(figure, filename='primer_grafico_barras_plotly.html')
En el fragmento anterior, hice un gráfico de barras que muestra la cantidad de diferentes categorías de frutas. El proceso de crear y mostrar la figura sigue siendo el mismo; lo único que cambia es el tipo de rastro que estás usando.
La práctica es crucial, así que te recomiendo experimentar con los diferentes tipos de rastros (go.Scatter
, go.Bar
, go.Pie
, etc.) y familiarizarte con la idea de rastros y diseños, ya que estos conceptos son fundamentales para usar Plotly.
Hay una gran cantidad de recursos disponibles. Si tienes problemas, los foros de la comunidad de Plotly son un excelente lugar para hacer preguntas. La documentación de Plotly para Python también es una referencia excelente con muchos ejemplos.
Eso es todo para tu primer gráfico con Plotly. En las siguientes secciones, aprenderás a personalizar estos gráficos para que sean más informativos y visualmente atractivos, así como a añadir interactividad a tus gráficos de Plotly. ¡Feliz trazado!
Personalización de Gráficos de Plotly para Atractivo Visual
Personalizar gráficos con Plotly añade un toque profesional y personal a la visualización de datos. Al empezar a usar Plotly, la gran cantidad de opciones de personalización parecía abrumadora, pero dominar estos pasos mejoró significativamente la presentación de mis datos. Así puedes hacerlo tú también.
import plotly.graph_objs as go
# Crear un gráfico de dispersión básico
fig = go.Figure(data=[go.Scatter(
x=[1, 2, 3],
y=[4, 1, 2],
mode='markers'
)])
# Personalizar el diseño
fig.update_layout(
title='Gráfico de Dispersión Personalizado',
xaxis_title='Título del Eje X',
yaxis_title='Título del Eje Y',
font=dict(family='Courier New, monospace', size=18, color='RebeccaPurple')
)
# Personalizar la apariencia de los marcadores
fig.update_traces(
marker=dict(size=12, color='LightSkyBlue', symbol='circle', line=dict(color='MediumPurple', width=2))
)
fig.show()
En el código anterior, he personalizado el diseño del gráfico de dispersión y el estilo de los marcadores. Al actualizar el título, y los títulos de los ejes, el gráfico comunica la información de manera más clara. El diccionario font cambia el estilo del texto, dándole una apariencia distinta. Además, el método update_traces mejora la apariencia visual de los marcadores. Para aprender más sobre la creación de visualizaciones de datos efectivas en Python, ve nuestro Tutorial corto: visualización de datos en Python con Altair.
Los esquemas de colores son fundamentales para que los gráficos sean visualmente atractivos. Plotly soporta varias escalas de colores, y puedes aplicarlas fácilmente a gráficos de barras.
import plotly.express as px
# Crear un gráfico de barras básico
df = px.data.gapminder().query("country=='Canada'")
fig = px.bar(df, x='year', y='pop')
# Personalizar colores
fig.update_traces(marker_color='rgba(135, 206, 250, 0.6)',
marker_line_color='rgba(0, 191, 255, 1.0)',
marker_line_width=1.5,
opacity=0.6)
fig.update_layout(title_text='Población a lo Largo de los Años en Canadá')
fig.show()
Este fragmento aplica un color azul semi-transparente a las barras y un contorno azul sólido. Esto da profundidad al gráfico y lo hace más interesante.
Al mostrar múltiples series de datos, es útil personalizar la leyenda para mejorar la legibilidad. La leyenda en Plotly puede ser posicionada y estilizada para ajustarse al contexto de los datos.
import plotly.graph_objs as go
# Crear un gráfico de líneas con tres líneas
fig = go.Figure()
fig.add_trace(go.Scatter(x=[1, 2, 3], y=[4, 5, 6],
mode='lines+markers',
name='Serie 1'))
fig.add_trace(go.Scatter(x=[1, 2, 3], y=[1, 6, 3],
mode='lines+markers',
name='Serie 2'))
fig.add_trace(go.Scatter(x=[1, 2, 3], y=[6, 5, 4],
mode='lines+markers',
name='Serie 3'))
# Personalizar la leyenda
fig.update_layout(legend=dict(
yanchor="top",
y=0.99,
xanchor="left",
x=0.01
))
fig.show()
Este código alinea la leyenda de manera ordenada en la esquina superior izquierda, clara y sin obstrucciones para su interpretación.
Por último, los temas son un atajo conveniente para la personalización. Plotly ofrece varios temas incorporados que modifican instantáneamente la estética del gráfico.
import plotly.io as pio
# Aplicar un tema incorporado
pio.templates.default = "plotly_dark"
fig.show()
Este fragmento configura el tema predeterminado a "plotly_dark," que aplica un fondo oscuro y un conjunto de colores adecuado para presentaciones en ambientes oscuros.
Recuerda, aunque la personalización puede realzar considerablemente la apariencia de tus gráficos, es importante mantener un balance entre estilo y legibilidad. Los datos son la estrella; los elementos visuales están para apoyar su historia.
Para una documentación completa sobre personalización, la documentación oficial de las bibliotecas gráficas de Plotly es un recurso invaluable. La comunidad de Plotly en GitHub y foros como Stack Overflow también son muy útiles para resolver problemas específicos.
Incorporar estas personalizaciones en tus gráficos de Plotly puede hacer que la narrativa visual de tus datos sea tan impactante como los propios insights. Sigue experimentando con diferentes estilos y diseños; a veces, pequeños ajustes pueden marcar una gran diferencia.
Interactividad y Compartición con Plotly
La interactividad y el compartir son los pilares que hacen de Plotly más que una simple herramienta de visualización, convirtiéndolo en una plataforma dinámica para la exploración y distribución de datos. He descubierto que los insights que obtengo de los gráficos de Plotly se aprovechan mejor cuando se pueden explorar y examinar por partes por los interesados curiosos que quieren ver la historia detrás de los números.
Vamos a ver cómo puedes implementar funciones interactivas y compartir tus creaciones en Plotly.
Los elementos interactivos en Plotly suelen girar en torno a herramientas de hover (pasar el cursor), sliders (barras deslizantes) y botones. Añadir una herramienta de hover es tan simple como establecer hover_data
en tu objeto de gráfico. Aquí tienes un ejemplo rápido usando un gráfico de dispersión:
import plotly.express as px
df = px.data.iris() # Conjunto de datos de Iris
fig = px.scatter(df, x='sepal_width', y='sepal_length', color='species',
hover_data=['petal_length', 'petal_width'])
fig.show()
Los sliders y botones llevan la interactividad a otro nivel permitiendo a los usuarios manipular los datos que ven. Por ejemplo, imagina tener datos de series temporales y quieres permitir que los usuarios revisen los años:
from plotly.subplots import make_subplots
import plotly.graph_objects as go
# Supongamos que df es un DataFrame con columnas 'Year', 'Value', y 'Category'
fig = make_subplots()
buttons = []
for year in df['Year'].unique():
year_data = df[df['Year'] == year]
for category in year_data['Category'].unique():
category_data = year_data[year_data['Category'] == category]
fig.add_trace(go.Scatter(x=category_data['Date'], y=category_data['Value'], name=category))
buttons.append(dict(method='update',
label=str(year),
args=[{'visible': [year == y for y in df['Year']]}]))
fig.update_layout(showlegend=True, updatemenus=[{"buttons": buttons, "direction": "down", "showactive": True}])
fig.show()
Ahora, hablemos sobre el compartir. Los gráficos interactivos son geniales, pero son aún mejores cuando se comparten. Puedes exportar tus gráficos Plotly a archivos HTML o imágenes directamente desde la biblioteca:
fig.write_html('mi_grafico_interactivo.html')
fig.write_image('mi_grafico.png')
Sin embargo, hospedarlos en la web les da vida. Usando Dash by Plotly, puedes construir una aplicación web para presentar tus gráficos. Aquí te muestro cómo empezar una aplicación Dash muy simple:
# Asegúrate de tener dash instalado: pip install dash
import dash
import dash_core_components as dcc
import dash_html_components as html
app = dash.Dash()
# Reutilizando nuestro 'fig' del ejemplo anterior
app.layout = html.Div([
dcc.Graph(figure=fig)
])
if __name__ == '__main__':
app.run_server(debug=True)
Con esta configuración, cualquier persona con el URL de tu aplicación Dash puede acceder, interactuar y aprender de tus gráficos. En mi experiencia, este acceso inmediato transforma el análisis de datos de algo ocasionalmente seco e insular en un diálogo vibrante.
Si estás haciendo esto en un contexto profesional o académico donde necesitas referenciar fuentes, la trazabilidad de Plotly es una característica poderosa. Puedes agregar anotaciones de texto para enlazar a las fuentes o incluso codificar metadatos dentro de tus gráficos que pueden ser accedidos programáticamente.
La colaboración es otro aspecto que se destaca con las capacidades de compartir de Plotly. Con el Chart Studio en línea de Plotly, los gráficos pueden ser editados por múltiples usuarios, permitiendo a un equipo refinar de manera iterativa su narrativa visual.
Para aquellos más interesados en el código y en contribuir o explorar más, el repositorio de GitHub de Plotly es una mina de oro de información y se mantiene activamente: https://github.com/plotly/plotly.py.
En mi trayectoria con la visualización de datos, he encontrado que la mezcla de interactividad y facilidad de compartir de Plotly no solo es convincente, sino también un componente esencial para traducir narrativas de datos complejas en historias fáciles de digerir. A medida que incorporas estas características en tus gráficos, estoy seguro de que discernirás el mismo valor intrínseco y, con suerte, compartirás ese entusiasmo con otros al distribuir tus insights.
Compartir