Python altair — построение фасетной линии с несколькими переменными

#facet #altair

#фасет #altair

Вопрос:

У меня есть следующий тип фрейма данных

 Marque Annee Modele PVFP           PM
0   A   1   Python  70783.066836    2.067821e 07
1   A   2   Python  75504.270716    1.957717e 07
2   A   3   Python  66383.237169    1.848982e 07
3   A   4   Python  61966.851675    1.755261e 07
4   A   5   Python  54516.367597    1.671907e 07
5   A   1   Sol     66400.686091    2.067821e 07
6   A   2   Sol     74953.770294    1.955218e 07
7   A   3   Sol     66500.916446    1.844078e 07
8   A   4   Sol     62016.941237    1.748098e 07
9   A   5   Sol     54356.008414    1.662684e 07
10  B   1   Python  43152.461787    1.340989e 07
11  B   2   Python  62397.794144    1.494418e 07
12  B   3   Python  1871.135251     2.178552e 06
  

Я пытался построить фасетный граф, но без особого успеха. Я просто могу объединить по вертикали 2 сгенерированные диаграммы. Я был бы признателен, если у вас есть какие-либо идеи, как сделать это правильно за одну операцию.

Мой текущий код :

    chart = alt.Chart(euro).mark_line().encode(
    x='Annee',
    y='PVFP',
    color='Modele'
).properties(
    width=150,
    height=150
).facet(
    facet='Marque',
    columns=3
)

chart2 = alt.Chart(euro).mark_line().encode(
    x='Annee',
    y='PM',
    color='Modele'
).properties(
    width=150,
    height=150
).facet(
    facet='Marque',
    columns=3
)

chart amp; chart2
  

введите описание изображения здесь

Ответ №1:

Один из хороших способов сделать это — использовать преобразование сгиба, чтобы объединить два ваших столбца в один, а затем вы можете использовать row column фасеты и для фасетирования по обеим переменным одновременно. Например:

 alt.Chart(euro).transform_fold(
    ['PVFP', 'PM'], as_=['key', 'value']
).mark_line().encode(
    x='Annee:Q',
    y='value:Q',
    color='Modele:N'
).properties(
    width=150,
    height=150
).facet(
    column='Marque:N',
    row='key:N'
)
  

Комментарии:

1. Спасибо, он хорошо справляется с задачей. Но, возможно, я ошибся в выборе типа графика. Мне нужно было бы сохранить разные масштабы для двух переменных (PM, PVFP).