Я писал программу на Python с помощью библиотек Altair и Streamlit для визуализации данных на локально обновляемой информационной панели в режиме реального времени. Я буду первым, кто признает, что для меня это неизведанные территории, поскольку раньше у меня был только опыт работы с C, и я учусь на каждом этапе пути. В настоящее время я получаю значения через API OpenF1 и конвертирую их в RGBA, добавляя знак «#» перед строкой. Затем я сортирую их по драйверу, добавляю в фрейм данных pandas (который также включает в себя все другие значения, относящиеся к графику скрипки) и передаю структуру функции alt.Chart(). К сожалению, Альтаир, похоже, не распознает эти значения и присваивает всей диаграмме синий цвет.
lapViolin = alt.Chart(data2, width=100).transform_density(
'Laptime',
as_=['Laptime','density'],
groupby=['Driver']
).mark_area(orient='horizontal').encode(
x=alt.X('density:Q')
.stack('center')
.title(None)
.impute(None)
.axis(labels=False, values=[0], grid=False, ticks=True),
y=alt.Y('Laptime:Q'),
color=alt.Color('Team'),
column=alt.Column('Driver:N')
.spacing(0)
.header(titleOrient='bottom', labelOrient='bottom', labelPadding=0)
).configure_view(
stroke=None
)
st.altair_chart(lapViolin)
Я попытался создать еще один график, который мне нужен для проекта, который представляет собой точечную диаграмму с использованием как color='Team'
, так и функции alt.Column(), но он выводит заранее определенные цвета, только на этот раз точки точечной диаграммы, по крайней мере, сгруппированы правильно.
Scatter сюжет
Раздел настройки в документации включает пример того, как использовать необработанные значения цвета, установив .scale(None)
:
import pandas as pd
import altair as alt
data = pd.DataFrame({
'x': range(6),
'color': ['red', 'steelblue', 'chartreuse', '#F4D03F', '#D35400', '#7D3C98']
})
alt.Chart(data).mark_point(
filled=True,
size=100
).encode(
x='x',
color=alt.Color('color').scale(None)
)