Ver el esquema de colores actual en Altair
Al dibujar un gráfico con varias capas, algunas capas tienen colores incompatibles.
Traté de solucionarlo usando un alt.Scale. El problema es que los colores no coinciden con el tema que había seleccionado. Me gustaría poder usar los colores del tema actual, pero poder elegir cuál se utiliza para cada elemento en el gráfico.
En particular, este es mi código:
make_era_labels = lambda df_slice, mode : \
alt.Chart(df_slice).mark_text(
align='right' if mode == 'high' else 'left',
baseline='top',
size = 14,
fontWeight='bold',
angle = 270,
dx = -20,#120,
dy=20,#25
).encode(
text='Era',
x=alt.X('start', title = x_axis),
y=alt.value(0 if mode =="high" else 600), # pixels from top
color=alt.Color('Era',
legend = None,
scale=alt.Scale(
domain=['Pre Deep Learning Era', 'Deep Learning Era', 'Large Scale Era'],
range=['yellow', 'blue', 'red']) if large_scale_action == 'isolate' else alt.Undefined
)
)
midpoint = pd.to_datetime(f"{(year_start.year + year_end.year) // 2}-01-01")
left_era_labels = make_era_labels(eras_df[eras_df['start'] < midpoint], "high")
right_era_labels = make_era_labels(eras_df[eras_df['start'] > midpoint], "low")
Dado que estoy creando el gráfico en dos partes, los colores no están coordinados y el primer color del esquema se repite. Pero cuando elijo los colores yo mismo con un alt.Scale
, los colores ya no coinciden con el tema.
En lugar de range=['yellow', 'blue', 'red']
, me gustaría tener colores correspondientes al tema actual. Por ejemplo, el yellow
que aparece ahora es demasiado brillante.
Intenté usar alt.themes.get()
, pero eso solo me devuelve de manera poco útil VegaTheme('fivethirtyeight')
, el nombre del tema que estoy usando.
davy.ai
Como experto en tecnología de la información especializado en Python y Altair, hay un par de formas en las que podrías intentar resolver este problema. Una opción es utilizar la clase
ColorScheme
de la libreríaaltair_saver
. Esta librería está diseñada para funcionar con Altair y brinda funcionalidades adicionales que no están disponibles en el paquete básico de Altair, incluyendo acceso a esquemas de color predefinidos. Aquí hay un ejemplo de código que demuestra cómo utilizar este enfoque:Este código crea un objeto
ColorScheme
, el cual se utiliza para definir una escala de color para el gráfico. La claseColorScheme
brinda acceso a una variedad de esquemas de color incorporados que puedes utilizar, y también puedes crear el tuyo propio pasando una lista de colores. Aquí he utilizado el esquema de color “tableau10”, el cual consiste en 10 colores distintos que están optimizados para su uso en visualizaciones de datos.Por defecto, la clase
ColorScheme
devuelve una lista de valoresRGB
. Sin embargo, Altair espera que los colores se especifiquen utilizando códigoshex
. Para convertir los valoresRGB
a códigoshex
, podemos utilizar la funciónrgb2hex
de la libreríamatplotlib
, de la siguiente manera:Ahora tienes una lista de códigos hex que se pueden utilizar para definir el
rango
de tu escala de color. O, simplemente podrías utilizar los valoresRGB
y Altair automáticamente los convertirá a códigos hex.Ten en cuenta que, dependiendo del tema que estés utilizando, es posible que debas ajustar los colores para lograr el efecto deseado. Es posible que necesites experimentar con diferentes esquemas de color para encontrar uno que funcione bien con el tema que has elegido. Pero una vez que hayas encontrado algo que funcione, utilizar un esquema de color predefinido puede ser una forma fácil de asegurarte de que tus colores se ajusten al estilo general de tu gráfica.