es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Error de validación del esquema de Altair al hacer facetas.

Tengo este marco de datos:

df

Y quiero hacer un gráfico de barras apiladas horizontales que muestre la misma información que este gráfico:

chart

He generado este código:

chart = alt.Chart(df<em>q4).mark</em>bar().encode(
    x = alt.X('value:Q', axis=None),
    color=alt.Color('color_code:N', scale=None),
    ).facet("title:N"
    ).properties(
    width=400,
    height=700)

<p>chart
<code>
Sin embargo, arroja este error:
</code>
SchemaValidationError: especificación no válida</p>

<pre><code>    altair.vegalite.v4.api.Chart, validando 'requerido'

    'datos' es una propiedad requerida
</code></pre>

<p>alt.FacetChart(...)

No estoy seguro de por qué no puedo fragmentar. También he intentado codificar el objeto de fragmento dentro de la codificación del gráfico, y eso tampoco funcionó.

También me gustaría incorporar algún código en mi gráfico que muestre solo los títulos, colores y valores relacionados con una temporada específica. Esto se hará mediante la inclusión del código en una función que sea algo como:

definir paleta de colores(temporada):

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que el error se debe a que la especificación del gráfico no incluye la propiedad de datos. Deberías agregar la propiedad de datos con df_q4 como valor. Además, para el facetado, debes especificar el nombre de la columna por la que deseas facetar.

    Aquí está el código corregido:

    chart = alt.Chart(df_q4).mark_bar().encode(
        x=alt.X('value:Q', axis=None),
        color=alt.Color('color_code:N', scale=None),
        ).facet(column='title:N'
        ).properties(
        width=400,
        height=700)
    
    chart
    

    Para mostrar solo los títulos, colores y valores relacionados con una temporada específica, puedes filtrar el dataframe antes de crear el gráfico. Aquí hay una función de ejemplo que toma una temporada como argumento y devuelve un gráfico con solo los datos para esa temporada:

    def paleta_de_colores(df, season):
        # Filtrar el dataframe por temporada
        df_season = df[df['season'] == season]
    
        # Crear gráfico con los datos filtrados
        chart = alt.Chart(df_season).mark_bar().encode(
            x=alt.X('value:Q', axis=None),
            color=alt.Color('color_code:N', scale=None),
            ).facet(column='title:N'
            ).properties(
            width=400,
            height=700)
    
        return chart
    

    Puedes usar esta función de la siguiente manera:

    chart = paleta_de_colores(df_q4, 'season_2')
    chart.show()
    

Comments are closed.