Altair 上的图表 concatenation/group

Graph concatenation/group on Altair

我一直在寻找文档来简化我的代码,并将我在 Altair 上的图表分组为更少的行。我正在单独创建每个图并通过串联对它们进行分组。

你们有什么建议吗?我坚持,为了简化代码。

这是我的代码:

#Lugares de ocio
retail_recretation = alt.Chart(sub_df).mark_line(color="green", size=1).encode(
    alt.X('date:T', title = " "),
    alt.Y('retail_and_recreation_percent_change_from_baseline:Q', title='Cambio porcentual'),
).properties(
    title = "Lugares de ocio",
    width = 300,
)

#Mercados y farmacias
grocery_pharmacy = alt.Chart(sub_df).mark_line(color="green", size=1).encode(
    alt.X('date:T', title = " "),
    alt.Y('grocery_and_pharmacy_percent_change_from_baseline:Q',  title='Cambio porcentual'),
).properties(
    title = "Mercados y farmacias",
    width = 300
)

#Parques y playas 
parks = alt.Chart(sub_df).mark_line(color="green", size=1).encode(
    alt.X('date:T', title = " "),
    alt.Y('parks_percent_change_from_baseline:Q', title='Cambio porcentual')
).properties(
    title = "Parques y playas",
    width = 300
)

#Transporte público
transit = alt.Chart(sub_df).mark_line(color="green", size=1).encode(
    alt.X('date:T', title = " "),
    alt.Y('transit_stations_percent_change_from_baseline:Q', title='Cambio porcentual')
).properties(
    title = "Transporte público",
    width = 300
)

#Lugares de trabajo
workplaces = alt.Chart(sub_df).mark_line(color="green", size=1).encode(
    alt.X('date:T', title = " "),
    alt.Y('workplaces_percent_change_from_baseline:Q', title='Cambio porcentual')
).properties(
    title = "Lugares de trabajo",
    width = 300
)

#Residenciales
residential = alt.Chart(sub_df).mark_line(color="green", size=1).encode(
    alt.X('date:T', title = " "),
    alt.Y('residential_percent_change_from_baseline:Q', title='Cambio porcentual')
).properties(
    title = "Residenciales",
    width = 300
)

#Concat
par1 = retail_recretation | grocery_pharmacy | parks
par2 = transit | workplaces | residential

#Concat2
mobility_colima = par1 & par2

这是输出:

您可以使用 fold transform 然后进行分面编码。

import numpy as np
import pandas as pd
import altair as alt

rand = np.random.RandomState(0)
data = pd.DataFrame({
    'date': pd.date_range('2019-01-01', freq='D', periods=30),
    'A': rand.randn(30).cumsum(),
    'B': rand.randn(30).cumsum(),
    'C': rand.randn(30).cumsum(),
    'D': rand.randn(30).cumsum(),
})

alt.Chart(data).transform_fold(
    ['A', 'B', 'C', 'D'],
).mark_line().encode(
    x='date:T',
    y='value:Q',
    facet=alt.Facet('key:N', columns=2)
)