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.

Vega: marca de barra vacía

¿Vega/Vega-Lite/Altair tienen un método incorporado para dibujar una marca especial para barras vacías? Cuando x == x2 no se muestra ninguna marca por el momento. ¿Quizás una marca de regla vertical del mismo color esperado de la barra derivado de una tercera codificación? ¿O quizás una marca de barra semitransparente que cubra una región ampliada con un borde rojo?

data =\
[ ('a', 1, 100, 123, 4.5)
, ('a', 2, 140, 190, 5.6)
, ('a', 3, 402, 402, 1.6)
, ('b', 1, 100, 123, 5.7)
, ('b', 2, 134, 456, 6.7)
, ('b', 3, 503, 504, 8.2)
, ('b', 4, 602, 765, 1.1)
, ('c', 1, 95,  95,  0.1)
, ('c', 2, 140, 145, 7.5)
, ('c', 3, 190, 190, 9.9)
]
data = pd.DataFrame(data, columns=['k','ki','min','max','other'])
chart =\
    ( alt.Chart(data)
    . mark_bar()
    . encode
        ( x='min'
        , x2='max'
        , y='k:O'
        , color='ki:N'
        , tooltip=['min', 'max', 'other']
        )
    . interactive()
    . properties
        ( width='container'
        , height=300
        )
    )

Una transformación de cálculo para min/max podría llegar a una solución a través de una región ampliada, con una opacidad condicional en los campos originales min/max. No estoy seguro acerca del borde rojo. El inconveniente de este enfoque es que la barra aumenta con el zoom, a diferencia de una marca de regla.

Una marca de regla tiene la ventaja de no representar incorrectamente los datos, pero puede ser difícil de detectar. Requeriría una transformación de filtro, aunque no estoy seguro si tengo que construir a partir del gráfico de barras inicial, o si puedo encadenar mark_bar -> transform_filter -> mark_rule.

De todos modos, una solución es complicada tanto técnicamente como en términos de representación de datos y me preguntaba si Vega/Altair tiene una solución incorporada para facilitar cualquiera de ellos.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Según la versión actual (v4.2) de Vega y Vega-Lite, no parece haber un método incorporado para dibujar una marca especial para barras vacías cuando x == x2. Sin embargo, como se discute en el código proporcionado, hay formas de superar esta limitación utilizando transformaciones de cálculo y codificación condicional.

    Es posible utilizar una transformación de cálculo para crear un nuevo campo que defina una región ampliada basada en los valores min y max, y luego utilizar este campo para aplicar una opacidad condicional a los campos originales min y max. Este enfoque permite utilizar una marca de barra semitransparente para llenar la región ampliada e indicar la presencia de una barra vacía.

    Alternativamente, se puede utilizar una marca de regla del mismo color de barra esperado derivado de una tercera codificación para indicar la presencia de una barra vacía. Este enfoque requeriría una transformación de filtro, y no está claro si sería posible encadenar mark_bar -> transform_filter -> mark_rule.

    En general, aunque no hay soluciones incorporadas en Vega o Vega-Lite para este problema específico, las soluciones alternativas disponibles permiten desarrollar soluciones creativas con algunas consideraciones técnicas y de representación de datos.

Comments are closed.