Вы можете сделать это, указав .repeat()
и список переменных row
и column
. Это ближе к facet_grid()
ggplot, чем facet_wrap()
, но API очень элегантный. (См. Обсуждение здесь .) API: здесь
iris = data.iris()
alt.Chart(iris).mark_circle().encode(
alt.X(alt.repeat("column"), type='quantitative'),
alt.Y(alt.repeat("row"), type='quantitative'),
color='species:N'
).properties(
width=250,
height=250
).repeat(
row=['petalLength', 'petalWidth'],
column=['sepalLength', 'sepalWidth']
).interactive()
Который производит:
Обратите внимание, что весь набор интерактивен в тандеме (увеличение, уменьшение).
Обязательно ознакомьтесь с RepeatedCharts и FacetedCharts в документации.
Создание стиля графиков facet_wrap()
Если вы хотите, чтобы лента диаграмм располагалась одна за другой (не обязательно отображая столбец или строку в переменные в вашем фрейме данных), вы можете сделать это, поместив комбинацию hconcat()
и vconcat()
в список Альтаирские участки.
Я уверен, что есть более элегантные способы, но я так и сделал.
Логика используется в коде ниже:
- Сначала создайте
base
диаграмму Альтаира
- Используйте
transform_filter()
, чтобы отфильтровать ваши данные на нескольких участках
- Определите количество участков в одном ряду и нарежьте этот список
- Прокручивать список списков, складывая по одной строке за раз.
-
import altair as alt
from vega_datasets import data
from altair.expr import datum
iris = data.iris()
base = alt.Chart(iris).mark_point().encode(
x='petalLength:Q',
y='petalWidth:Q',
color='species:N'
).properties(
width=60,
height=60
)
#create a list of subplots
subplts = []
for pw in iris['petalWidth'].unique():
subplts.append(base.transform_filter(datum.petalWidth == pw))
def facet_wrap(subplts, plots_per_row):
rows = [subplts[i:i+plots_per_row] for i in range(0, len(subplts), plots_per_row)]
compound_chart = alt.hconcat()
for r in rows:
rowplot = alt.vconcat() #start a new row
for item in r:
rowplot |= item #add suplot to current row as a new column
compound_chart &= rowplot # add the entire row of plots as a new row
return compound_chart
compound_chart = facet_wrap(subplts, plots_per_row=6)
compound_chart
производить: