Russian Articles

Графики в Python

Matplotlib

Matplotlib – классика, де-факто стандарт визуализации в Python.

Плюсы:

Минусы:

Seaborn

Seaborn – стандарт номер два, сразу за matplotlib. Собственно, представляет из себя как раз обертку над matplotlib с модным дизайном и функциями для рисования самых нужных графиков.

Плюсы:

Минусы:

Altair

Altair – штука не столь известная, но очень хорошая.

Плюсы:

Минусы:

Ggplot2

ggpy – порт ggplot2 из R. Ggplot2 реализует удобную грамматику графиков. Основная идея в том, что график состоит из разных слоев. Чем сложнее график, тем больше слоев надо. Сначала идет сетка, потом сам график, а может и несколько, затем оси, легенда. Ну и график – просто сумма таких слоев. Это интуитивно понятно, удобно, просто.

Я добавил сюда ggpy, чтобы рассказать вам про ggplot2. Но про плюсы я рассказывать не буду, потому что один минус перекрывает всё: проект больше не поддерживается. Авторы пропали, компанию, которая это делала, поглотили, PR не принимаются. Как следствие, ggpy не совместим с новыми версиями pandas.

Plotnine

Plotnine – второй проект, копирующий ggplot.

Плюсы:

Минусы:

В общем, Plotnine мне нравится больше всего, но отсутствие документации увеличивает порог вхождения.

Show me the code!

Давайте посмотрим на выживание пассажиров титаника в зависимости от класса. Всего там три класса. Первый – элита, третий – самые дешевые билеты. Сделаем по столбцу на каждый класс, высота будет показывать количество пассажиров, а также разделим столбцы на две части: выжившие и нет.

Код на R:

ggbar <- ggplot(titanic) + geom_bar(stat = "bin", width=.6)
ggbar + aes(x = factor(Pclass),
            fill = factor(Survived, labels = c("No", "Yes"))) +
        scale_fill_manual (values=colours[]) +
        guides(fill=guide_legend(title=NULL)) +
        ylab(NULL) + xlab("Passager class")

Код на plotnine:

import pandas as pd
import plotnine as gg

titanic = pd.read_csv('train.csv')

(
    gg.ggplot(titanic)
    + gg.geom_bar(
        gg.aes(
            x='factor(Pclass)',
            fill='factor(Survived)',
        ),
    )
    + gg.scale_fill_hue(
        labels=['No', 'Yes'],
    )
    + gg.theme_seaborn()
)

Код на altair, только у меня не получилось нормально подписать Survived:

alt.Chart(titanic).mark_bar().encode(
    x='Pclass:N',
    y='count()',
    fill='Survived:N',
).properties(
    width=300,
)

More!

Я тут не рассматривал интерактивные графики, не приводил примеры кода. Так что рекомендую почитать ещё:

created: 2019-01-26 (Sat) updated: 2019-01-27 (Sun) views: 136

Contributors

orsinium delimitry