Боковые боксы в Альтаире - PullRequest
1 голос
/ 28 мая 2020

У меня есть этот фрейм данных:

this

df = pd.DataFrame(np.array([[1, 4, 7], [2, 5, 8], [3, 6, 9],
                            [4, 7, 10], [5, 8, 11]
                            ]), columns=['a', 'b', 'c'])

Как мне создать параллельные блочные диаграммы в Altair для каждой переменной?

Ответы [ 2 ]

2 голосов
/ 28 мая 2020

У вас есть данные в широкой форме, тогда как Altair лучше всего работает с данными в полной форме. Для обсуждения этого см. Длинные и широкие данные в документации Altair.

Вы можете изменить форму своих данных в pandas, используя pd.melt (как показано в ответе @ chthonicdaemon ), или вы можете использовать Altair Fold Transform для изменения формы данных в соответствии со спецификацией вашей диаграммы.

Вот пример подхода на основе преобразования:

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

df = pd.DataFrame(np.array([[1, 4, 7], [2, 5, 8], [3, 6, 9],
                            [4, 7, 10], [5, 8, 11]
                            ]), columns=['a', 'b', 'c'])

alt.Chart(df).transform_fold(
    ['a', 'b', 'c'],
    as_=['key', 'value']
).mark_boxplot().encode(
    x='key:N',
    y='value:Q'
)

enter image description here

2 голосов
/ 28 мая 2020

Ключ в понимании того, что altair ожидает данные в узком формате, что мы можем сделать с помощью .melt():

import altair as alt

alt.Chart(df.melt()).mark_boxplot().encode(
    x='variable',
    y='value'
)

Результат:

boxplots

...