Вы можете сделать это, указав .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()
Что производит:
![введите описание изображения здесь](https://i.stack.imgur.com/vbjRI.png)
Обратите внимание, что весь набор интерактивен в тандеме (увеличение, уменьшение).
Обязательно ознакомьтесь с 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
производить:
![введите описание изображения здесь](https://i.stack.imgur.com/XklR6.png)
person
Ram Narasimhan
schedule
04.05.2018