Anotaciones y formas en plotly

Las anotaciones son textos colocados en unas coordenadas concretas de un gráfico, con o sin flecha. Las formas son líneas, rectángulos y círculos dibujados sobre los datos. Ambas se agregan con los métodos fig.add_*.

Anotaciones de texto con add_annotation

Indica las coordenadas con x e y y el texto con text. Por defecto una flecha apunta a las coordenadas; utiliza showarrow = False para mostrar solo el texto.

import plotly.express as px

df = px.data.gapminder().query("country == 'Spain'")

fig = px.line(df, x = "year", y = "lifeExp")
top = df.loc[df["lifeExp"].idxmax()]

fig.add_annotation(x = top["year"], y = top["lifeExp"],
                   text = "Máximo", showarrow = True, arrowhead = 2)

fig.show()

Estilo de la anotación

Personaliza el texto con font, agrega una caja con bgcolor y bordercolor y desplaza el texto respecto a la flecha con ax y ay (en píxeles).

import plotly.express as px

df = px.data.gapminder().query("country == 'Spain'")

fig = px.line(df, x = "year", y = "lifeExp")
top = df.loc[df["lifeExp"].idxmax()]

fig.add_annotation(x = top["year"], y = top["lifeExp"], text = "Máximo",
                   font = dict(size = 14, color = "white"),
                   bgcolor = "tomato", bordercolor = "black",
                   ax = -60, ay = 30)

fig.show()

Líneas horizontales y verticales

add_hline y add_vline dibujan líneas que ocupan todo el gráfico, con una etiqueta opcional mediante annotation_text.

import plotly.express as px

df = px.data.gapminder().query("country == 'Spain'")

fig = px.line(df, x = "year", y = "lifeExp")

fig.add_hline(y = 75, line_dash = "dash", line_color = "red",
              annotation_text = "Referencia")
fig.add_vline(x = 1975, line_color = "gray")

fig.show()

Regiones sombreadas

add_hrect y add_vrect sombrean una banda horizontal o vertical, por ejemplo para destacar un periodo de tiempo.

import plotly.express as px

df = px.data.gapminder().query("country == 'Spain'")

fig = px.line(df, x = "year", y = "lifeExp", markers = True)

fig.add_vrect(x0 = 1975, x1 = 1982,
              fillcolor = "orange", opacity = 0.25, line_width = 0,
              annotation_text = "1975-1982")

fig.show()

Otras formas con add_shape

add_shape dibuja líneas, rectángulos, círculos y trazados entre dos puntos (x0, y0) y (x1, y1).

import plotly.express as px

df = px.data.gapminder().query("year == 2007")

fig = px.scatter(df, x = "gdpPercap", y = "lifeExp")

fig.add_shape(type = "circle", x0 = 35000, y0 = 77, x1 = 50000, y1 = 83,
              line_color = "red")

fig.show()

También se pueden agregar textos a cada punto de datos con el argumento text de Plotly Express. Para personalizar las etiquetas que aparecen al pasar el ratón consulta el tutorial sobre las etiquetas emergentes en plotly.

Better Data Visualizations

A Guide for Scholars, Researchers, and Wonks

Comprar en Amazon

También te puede interesar