line_polar
La función line_polar
de plotly express permite crear gráficos de radar o spider plots en Python. Para ello tendrás que pasar los valores numéricos al argumento r
y los grupos o categorías a theta
, tanto como nombres de columna de un data frame o como arrays. Ten en cuenta que puedes establecer line_close
como True
para dibujar una línea extra entre el primer y último punto, en caso de ser necesario.
import plotly.express as px
import pandas as pd
# Datos de muestra
df = pd.DataFrame(dict(
valor = [8, 12, 7, 14, 10],
variable = ['V1', 'V2', 'V3', 'V4', 'V5']))
fig = px.line_polar(df, r = 'valor', theta = 'variable', line_close = True)
fig.show()
Marcadores
Por defecto, las líneas se muestran sin puntos, pero puedes añadirlos estableciendo el argumento markers
como True
.
import plotly.express as px
import pandas as pd
# Datos de muestra
df = pd.DataFrame(dict(
valor = [8, 12, 7, 14, 10],
variable = ['V1', 'V2', 'V3', 'V4', 'V5']))
fig = px.line_polar(df, r = 'valor', theta = 'variable', line_close = True,
markers = True)
fig.show()
Colorear las áreas
Es posible colorear el área dentro de las líneas estableciendo el argumento fill
de la función update_traces
como 'toself'
.
import plotly.express as px
import pandas as pd
# Datos de muestra
df = pd.DataFrame(dict(
valor = [8, 12, 7, 14, 10],
variable = ['V1', 'V2', 'V3', 'V4', 'V5']))
fig = px.line_polar(df, r = 'valor', theta = 'variable', line_close = True)
fig.update_traces(fill = 'toself')
fig.show()
Etiquetas
La función line_polar
incluye un argumento llamado text
en el que puedes pasar un array o el nombre de una columna de un data frame para agregar etiquetas a cada punto. Además, puedes personalizar la posición de las etiquetas con textposition
. En el ejemplo siguiente estamos utilizando los valores como etiquetas.
import plotly.express as px
import pandas as pd
# Datos de muestra
df = pd.DataFrame(dict(
valor = [8, 12, 7, 14, 10],
variable = ['V1', 'V2', 'V3', 'V4', 'V5']))
fig = px.line_polar(df, r = 'valor', theta = 'variable', line_close = True,
text = 'valor')
fig.update_traces(fill = 'toself', textposition = 'top center')
fig.show()
Color
El color azul por defecto de plotly se puede personalizar pasando un color dentro de un array al argumento color_discrete_sequence
, como se muestra a continuación.
import plotly.express as px
import pandas as pd
# Datos de muestra
df = pd.DataFrame(dict(
valor = [8, 12, 7, 14, 10],
variable = ['V1', 'V2', 'V3', 'V4', 'V5']))
fig = px.line_polar(df, r = 'valor', theta = 'variable', line_close = True,
color_discrete_sequence = ['red'])
fig.update_traces(fill = 'toself')
fig.show()
Tipo de línea
El tipo de línea se puede personalizar haciendo uso del argumento line_dash_sequence
. Tendrás que pasar un array con un único elemento especificando el tipo de línea deseada.
import plotly.express as px
import pandas as pd
# Datos de muestra
df = pd.DataFrame(dict(
valor = [8, 12, 7, 14, 10],
variable = ['V1', 'V2', 'V3', 'V4', 'V5']))
fig = px.line_polar(df, r = 'valor', theta = 'variable', line_close = True,
line_dash_sequence = ['dash'])
fig.show()
Grupos con colores diferentes
Es posible crear un gráfico de radar por grupo o por individuo con la función line_polar
. Tendrás que tener tus datos divididos en varios grupos, individuos o categorías y luego podrás pasar la variable categórica a color
. En el data frame de muestra del ejemplo siguiente las cinco primeras filas corresponden al primer grupo mientras que las cinco últimas corresponden al segundo.
import plotly.express as px
import pandas as pd
# Datos de muestra
df = pd.DataFrame(dict(
valor = [8, 12, 7, 14, 10,
12, 8, 13, 6, 5],
variable = ['V1', 'V2', 'V3', 'V4', 'V5',
'V1', 'V2', 'V3', 'V4', 'V5'],
grupo = ['A', 'A', 'A', 'A', 'A',
'B', 'B', 'B', 'B', 'B']))
fig = px.line_polar(df, r = 'valor', theta = 'variable', line_close = True,
color = 'grupo')
fig.update_traces(fill = 'toself')
fig.show()
Ten en cuenta que puedes personalizar el color para cada grupo. Existen dos posibles opciones: pasar un array con tantos colores como grupos a color_discrete_sequence
o pasar un diccionario a color_discrete_map
especificando el color para cada grupo como en el ejemplo siguiente.
import plotly.express as px
import pandas as pd
# Datos de muestra
df = pd.DataFrame(dict(
valor = [8, 12, 7, 14, 10,
12, 8, 13, 6, 5],
variable = ['V1', 'V2', 'V3', 'V4', 'V5',
'V1', 'V2', 'V3', 'V4', 'V5'],
grupo = ['A', 'A', 'A', 'A', 'A',
'B', 'B', 'B', 'B', 'B']))
fig = px.line_polar(df, r = 'valor', theta = 'variable', line_close = True,
color = 'grupo', color_discrete_map = {'A': 'dodgerblue', 'B': 'gold'})
fig.update_traces(fill = 'toself')
fig.show()
Grupos con tipos de línea diferentes
Una alternativa a lo anterior es crear un gráfico de radar en el que cada grupo tendrá un tipo de línea diferente. Para ello tendrás que pasar la variable categórica que represente los grupos a line_dash
. Puedes personalizar el estilo de línea para cada grupo con line_dash_sequence
o con line_dash_map
.
import plotly.express as px
import pandas as pd
# Datos de muestra
df = pd.DataFrame(dict(
valor = [8, 12, 7, 14, 10,
12, 8, 13, 6, 5],
variable = ['V1', 'V2', 'V3', 'V4', 'V5',
'V1', 'V2', 'V3', 'V4', 'V5'],
grupo = ['A', 'A', 'A', 'A', 'A',
'B', 'B', 'B', 'B', 'B']))
fig = px.line_polar(df, r = 'valor', theta = 'variable', line_close = True,
line_dash = 'grupo')
fig.show()
También te puede interesar