Gráfico de barras en plotly

Gráficos de barras en plotly con bar

Puedes crear gráficos de barras en plotly y Python con bar, una función de plotly express. La función proporciona dos maneras de especificar datos: pasando un data frame y especificando los valores como nombres de columna de ese data frame o pasando arrays a x e y.

Por ejemplo, considera el siguiente data frame llamado df que representa cinco grupos (columna grupo) y los valores que toma cada uno (columna valor). Para crear un gráfico de barras en plotly y Python puedes escribir lo que se muestra en el siguiente bloque de código.

Gráfico de barras a partir de categorías y valores

import plotly.express as px
import pandas as pd

# Datos de muestra
df = pd.DataFrame(dict(
    grupo = ["A", "B", "C", "D", "E"],
    valor = [14, 12, 8, 10, 16]))

fig = px.bar(df, x = 'grupo', y = 'valor')

fig.show()

Gráfico de barras a partir de posiciones y valores

Ten en cuenta que en lugar de especificar grupos también puedes pasar un variable numérica como entrada. En este escenario, los elementos representarán la posición en la que crear las barras.

import plotly.express as px
import pandas as pd

# Datos de muestra
df = pd.DataFrame(dict(
    x = [1, 2, 4, 5],
    y = [14, 12, 10, 16]))

fig = px.bar(df, x = 'x', y = 'y')

fig.show()

Gráfico de barras horizontal

Es posible crear un gráfico de barras horizontal tan solo intercambiando los nombres de las columnas, es decir, pasando la variable categórica a y en lugar de a x.

import plotly.express as px
import pandas as pd

# Datos de muestra
df = pd.DataFrame(dict(
    grupo = ["A", "B", "C", "D", "E"],
    valor = [14, 12, 8, 10, 16]))

fig = px.bar(df, x = 'valor', y = 'grupo')

fig.show()

Barras de error

La función bar proporciona los argumentos error_y y error_x para especificar barras de error tanto para barras verticales como horizontales, respectivamente. Puedes pasar el nombre de una columna o un array representando la desviación típica para cada barra.

import plotly.express as px
import pandas as pd

# Datos de muestra
df = pd.DataFrame(dict(
    grupo = ["A", "B", "C", "D", "E"],
    valor = [14, 12, 8, 10, 16],
    error = [0.7, 0.2, 0.4, 0.3, 0.5]))

fig = px.bar(df, x = 'grupo', y = 'valor', error_y = 'error')

fig.show()

Título y etiquetas de los ejes

Puedes agregar un título al gráfico pasando una cadena de caracteres a title. Además, también puedes cambiar las etiquetas de los ejes con labels, que por defecto son los nombres de las columnas pasadas como entrada. Para cambiarlas, tendrás que crear un diccionario en el que las keys sean los nombres de las columnas pasadas a x e y, como en el ejemplo siguiente.

import plotly.express as px
import pandas as pd

# Datos de muestra
df = pd.DataFrame(dict(
    grupo = ["A", "B", "C", "D", "E"],
    valor = [14, 12, 8, 10, 16]))

fig = px.bar(df, x = 'grupo', y = 'valor',
             title = "Título",
             labels = {'grupo': 'Etiqueta de los grupos', 'valor': 'Etiqueta de los valores'})

fig.show()

Colores y patrones

El argumento color permite colorear las barras con colores en base a una variable categórica. Si pasas el nombre de la variable categórica al argumento cada barra tendrá un color diferente y se mostrará una leyenda para cada categoría.

import plotly.express as px
import pandas as pd

# Datos de muestra
df = pd.DataFrame(dict(
    grupo = ["A", "B", "C", "D", "E"],
    valor = [14, 12, 8, 10, 16]))

fig = px.bar(df, x = 'grupo', y = 'valor',
             color = 'grupo')

fig.show()

Colores personalizados

Es posible personalizar los colores para cada barra pasando un diccionario de grupos y colores a color_discrete_map o pasando un array de colores ordenados a color_discrete_sequence. Ten en cuenta que para cambiar los colores para cada grupo debes establecer color = 'grupo', siendo grupo el nombre de tu variable categórica. Si quieres cambiar el color para todas las barras pasa un array con un único color a color_discrete_sequence.

import plotly.express as px
import pandas as pd

# Datos de muestra
df = pd.DataFrame(dict(
    grupo = ["A", "B", "C", "D", "E"],
    valor = [14, 12, 8, 10, 16]))

fig = px.bar(df, x = 'grupo', y = 'valor', color = 'grupo',
             color_discrete_map = {'A': '#7FD4C1', 'B': '#30BFDD', 'C': '#8690FF', 
                                   'D': '#ACD0F4', 'E': '#F7C0BB'})

fig.show()

Color para todas las barras y color de los bordes

Una alternativa para cambiar el color para todas las barras es con el argumento marker_color de update_traces. Ten en cuenta que con update_traces puedes personalizar más ajustes, como el color del borde de las barras y su grosor o la opacidad del color.

import plotly.express as px
import pandas as pd

# Datos de muestra
df = pd.DataFrame(dict(
    grupo = ["A", "B", "C", "D", "E"],
    valor = [14, 12, 8, 10, 16]))

fig = px.bar(df, x = 'grupo', y = 'valor')
fig.update_traces(marker_color = 'green', marker_line_color = 'black',
                  marker_line_width = 2, opacity = 1)

fig.show()

Color en base a una variable numérica

Si pasas una variable numérica a color las barras se colorearán en base a esos valores con una paleta de colores continua.

import plotly.express as px
import pandas as pd

# Datos de muestra
df = pd.DataFrame(dict(
    grupo = ["A", "B", "C", "D", "E"],
    valor = [14, 12, 8, 10, 16]))

fig = px.bar(df, x = 'grupo', y = 'valor', color = 'valor')

fig.show()

Cambiar la paleta de colores continua

La paleta de colores continua por defecto se puede personalizar a través de color_continuous_scale. Puedes acceder a la lista completa de nombres de paletas de color de plotly escribiendo px.colors.named_colorscales(). Recuerda que si estableces una paleta de colores divergente también puedes modificar el punto central pasando un número a color_continuous_midpoint.

import plotly.express as px
import pandas as pd

# Datos de muestra
df = pd.DataFrame(dict(
    grupo = ["A", "B", "C", "D", "E"],
    valor = [14, 12, 8, 10, 16]))

fig = px.bar(df, x = 'grupo', y = 'valor',
             color = 'valor', color_continuous_scale = 'viridis')

fig.show()

Patrón por grupo

La función bar también permite agregar patrones a las barras en base a grupos con pattern_shape que funciona de la misma manera que el argumento color, pero en este caso cada barra tendrá un patrón diferente. Recuerda que también puedes establecer color, de modo que cada barra tendrá un color y patrón diferente.

import plotly.express as px
import pandas as pd

# Datos de muestra
df = pd.DataFrame(dict(
    grupo = ["A", "B", "C", "D", "E"],
    valor = [14, 12, 8, 10, 16]))

fig = px.bar(df, x = 'grupo', y = 'valor', pattern_shape = 'valor')

fig.show()

Patrones personalizados

Es posible especificar los patrones que queremos para cada barra pasando un array de patrones a pattern_shape_sequence o un diccionario con grupos y patrones a pattern_shape_map.

import plotly.express as px
import pandas as pd

# Datos de muestra
df = pd.DataFrame(dict(
    grupo = ["A", "B", "C", "D", "E"],
    valor = [14, 12, 8, 10, 16]))

fig = px.bar(df, x = 'grupo', y = 'valor', pattern_shape = 'valor',
             pattern_shape_sequence = ['x', '.', '+', '/', '.'])

fig.show()

Etiquetas de texto

Puedes agregar textos a cada barra de diferentes formas. La manera más sencilla es establecer text_auto = True, que mostrará los valores de cada barra. El color del texto se ajustará de manera automática en base al color de fondo de cada barra.

import plotly.express as px
import pandas as pd

# Datos de muestra
df = pd.DataFrame(dict(
    grupo = ["A", "B", "C", "D", "E"],
    valor = [14, 12, 8, 10, 16]))

fig = px.bar(df, x = 'grupo', y = 'valor',
             text_auto = True)

fig.show()

Texto personalizado

La función proporciona un argumento llamado text que permite especificar el nombre de una columna del data frame que contenga textos o un array de etiquetas, de modo que podrás personalizar el texto de cada barra.

import plotly.express as px
import pandas as pd

# Datos de muestra
df = pd.DataFrame(dict(
    grupo = ["A", "B", "C", "D", "E"],
    valor = [14, 12, 8, 10, 16],
    text =  ['G1', 'G2', 'G3', 'G4', 'G5']))

fig = px.bar(df, x = 'grupo', y = 'valor',
             text = 'text')

fig.show()

Estilo del texto

Ten en cuenta que utilizando update_traces puedes personalizar el color, la posición, el tamaño y el ángulo de los textos, entre otros ajustes, tal y como se muestra en el ejemplo siguiente.

import plotly.express as px
import pandas as pd

# Datos de muestra
df = pd.DataFrame(dict(
    grupo = ["A", "B", "C", "D", "E"],
    valor = [14, 12, 8, 10, 16]))

fig = px.bar(df, x = 'grupo', y = 'valor',
             text_auto = True)
fig.update_traces(textfont_size = 14, textangle = 0, textposition = "outside")

fig.show()
Fundamentals of Data Visualization

A Primer on Making Informative and Compelling Figures

Comprar en Amazon

También te puede interesar