Рубрики
Без рубрики

7 Отличных библиотек построения для Python – по сравнению (с руководствами для каждого)

Как сделать сюжеты в Python? Этот вопрос имел простой ответ: Matplotlib был … с меткой Python, DataScience, WebDev.

У этого вопроса был простой ответ: Matplotlib был единственным способом. В настоящее время Python – это язык науки о данных, и есть гораздо больше выбора. Что вам следует использовать?

Это руководство поможет вам решить. Я покажу вам, как использовать Семь библиотеков Python , с бонусом подробное руководство для каждой библиотеки !

Я также упаковал пример для каждой библиотеки как Наковальня Приложение, показывая, как построить веб-приложения для данных с Python Анкет Все эти библиотеки доступны в серверных модулях Anvil и прямо работают непосредственно в Anvil’s Front-End Python Code слишком! Нажмите на углубленные руководства для примера кода.

Самыми популярными библиотеками Python является Matplotlib, Plotly, Seaborn и Bokeh. Я также включил несколько недооцененных драгоценных камней, которые вы обязательно должны рассмотреть: Altair, с его выразительным API и Pygal, с его прекрасной выходом SVG. Мы также посмотрим на очень удобный API, предоставленный Pandas.

Каждая из этих библиотек требует немного другого подхода. Чтобы сравнить их, я собираюсь создать один и тот же сюжет с каждой библиотекой и покажу вам исходный код. Я выбрал сгруппированную барную карту британских выборов с 1966 года. Вот:

Я собрал набор данных британской истории выборов из Википедии : Количество мест в парламенте Великобритании, выигранного консервативными, трудовыми и либеральными партиями (широко определенными) на каждом выборах с 1966 по 2019 год, плюс количество мест, завоевавших «другие». Вы можете скачать его как файл CSV Здесь Анкет

Matplotlib это самая старая библиотека Python, и она по -прежнему самая популярная. Он был создан в 2003 году как часть Scipy Stack , библиотека научных вычислительных наук с открытым исходным кодом, похожая на Matlab.

Matplotlib дает вам точный контроль над вашими графиками-например, вы можете определить отдельное X-положение каждой полосы в вашем барже. Я написал более подробное руководство по Matplotlib, и вы можете найти его Здесь Анкет

    import matplotlib.pyplot as plt
    import numpy as np
    from votes import wide as df

    # Initialise a figure. subplots() with no args gives one plot.
    fig, ax = plt.subplots()

    # A little data preparation
    years = df['year']
    x = np.arange(len(years))

    # Plot each bar plot. Note: manually calculating the 'dodges' of the bars
    ax.bar(x - 3*width/2, df['conservative'], width, label='Conservative', color='#0343df')
    ax.bar(x - width/2, df['labour'], width, label='Labour', color='#e50000')
    ax.bar(x + width/2, df['liberal'], width, label='Liberal', color='#ffff14')
    ax.bar(x + 3*width/2, df['others'], width, label='Others', color='#929591')

    # Customise some display properties
    ax.set_ylabel('Seats')
    ax.set_title('UK election results')
    ax.set_xticks(x)    # This ensures we have one tick per year, otherwise we get fewer
    ax.set_xticklabels(years.astype(str).values, rotation='vertical')
    ax.legend()

    # Ask Matplotlib to show the plot
    plt.show()

Полный гид и пример кода: построение в Matplotlib>

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

Это не идет на компромисс на власти, хотя! Seaborn дает вам Escape люки Чтобы получить доступ к основным объектам Matplotlib, вы все еще имеете полный контроль. Вы можете проверить более подробное руководство по Seaborn Здесь Анкет

Вот наш участок выборов в Seaborn. Вы можете видеть, что код намного проще, чем необработанный matplotlib.

    import seaborn as sns
    from votes import long as df

    # Some boilerplate to initialise things
    sns.set()
    plt.figure()

    # This is where the actual plot gets made
    ax = sns.barplot(data=df, x="year", y="seats", hue="party", palette=['blue', 'red', 'yellow', 'grey'], saturation=0.6)

    # Customise some display properties
    ax.set_title('UK election results')
    ax.grid(color='#cccccc')
    ax.set_ylabel('Seats')
    ax.set_xlabel(None)
    ax.set_xticklabels(df["year"].unique().astype(str), rotation='vertical')

    # Ask Matplotlib to show it
    plt.show()

Полный гид и пример код: построение в Seaborn>

Старший это экосистема, которая включает в себя библиотеку на питоне. Есть три разных интерфейса:

  • объектно-ориентированный интерфейс
  • Императивный интерфейс, который позволяет указать ваш график с помощью данных, подобных JSON
  • и интерфейс высокого уровня, похожий на Seaborn, называемый Plotly Express.

Графики сюжета предназначены для встроенных в веб -приложения. По своей сути, Plotly на самом деле является библиотекой JavaScript! Он использует d3 и stack.gl, чтобы нарисовать сюжеты.

Вы можете создавать библиотеки в других языках на других языках, передавая JSON в библиотеку JavaScript. Официальные библиотеки Python и R делают именно это. На Анаворе мы перенесли API Python Plotlily в Запустить в веб -браузере Анкет

Вот график результатов выборов в слое:

import plotly.graph_objects as go
    from votes import wide as df

    #  Get a convenient list of x-values
    years = df['year']
    x = list(range(len(years)))

    # Specify the plots
    bar_plots = [
        go.Bar(x=x, y=df['conservative'], name='Conservative', marker=go.bar.Marker(color='#0343df')),
        go.Bar(x=x, y=df['labour'], name='Labour', marker=go.bar.Marker(color='#e50000')),
        go.Bar(x=x, y=df['liberal'], name='Liberal', marker=go.bar.Marker(color='#ffff14')),
        go.Bar(x=x, y=df['others'], name='Others', marker=go.bar.Marker(color='#929591')),
    ]

    # Customise some display properties
    layout = go.Layout(
        title=go.layout.Title(text="Election results", x=0.5),
        yaxis_title="Seats",
        xaxis_tickmode="array",
        xaxis_tickvals=list(range(27)),
        xaxis_ticktext=tuple(df['year'].values),
    )

    # Make the multi-bar plot
    fig = go.Figure(data=bar_plots, layout=layout)

    # Tell Plotly to render it
    fig.show()

Полный гид и пример кода: настройки с помощью слоя>

Боке (произносится «Boe-Kay») специализируется на создании интерактивных сюжетов, поэтому этот пример не показывает его лучшим. Проверьте Это расширенное руководство по боке , где мы добавляем несколько пользовательских подсказков! Как и в сюжете, графики Боке предназначены для встроенных в веб -приложения – он выводит свои графики в виде файлов HTML.

Вот результаты выборов, нанесенные в Боке:

from bokeh.io import show, output_file
    from bokeh.models import ColumnDataSource, FactorRange, HoverTool
    from bokeh.plotting import figure
    from bokeh.transform import factor_cmap
    from votes import long as df

    # Specify a file to write the plot to
    output_file("elections.html")

    # Tuples of groups (year, party)
    x = [(str(r[1]['year']), r[1]['party']) for r in df.iterrows()]
    y = df['seats']

    # Bokeh wraps your data in its own objects to support interactivity
    source = ColumnDataSource(data=dict(x=x, y=y))

    # Create a colourmap
    cmap = {
        'Conservative': '#0343df',
        'Labour': '#e50000',
        'Liberal': '#ffff14',
        'Others': '#929591',
    }
    fill_color = factor_cmap('x', palette=list(cmap.values()), factors=list(cmap.keys()), start=1, end=2)

    # Make the plot
    p = figure(x_range=FactorRange(*x), width=1200, title="Election results")
    p.vbar(x='x', top='y', width=0.9, source=source, fill_color=fill_color, line_color=fill_color)

    # Customise some display properties
    p.y_range.start = 0
    p.x_range.range_padding = 0.1
    p.yaxis.axis_label = 'Seats'
    p.xaxis.major_label_orientation = 1
    p.xgrid.grid_line_color = None

Полный гид и пример кода: Заговор с Боке>

Altair основан на декларативном языке построения (или «грамматике визуализации») под названием Вега . Это означает хорошо продуманную API, который хорошо масштабируется для сложных сюжетов, спасая вас от того, что он заблудился в аду.

Как и в случае с Bokeh, Altair выводит свои графики в виде HTML -файлов. Проверьте расширенное руководство по Altair Здесь Анкет

Вот как наш сюжет результатов выборов выглядит в Altair. Обратите внимание, насколько явно указан фактический график, только шесть строк Python:

import altair as alt
    from votes import long as df

    # Set up the colourmap
    cmap = {
        'Conservative': '#0343df',
        'Labour': '#e50000',
        'Liberal': '#ffff14',
        'Others': '#929591',
    }

    # Cast years to strings
    df['year'] = df['year'].astype(str)

    # Here's where we make the plot
    chart = alt.Chart(df).mark_bar().encode(
        x=alt.X('party', title=None),
        y='seats',
        column=alt.Column('year', sort=list(df['year']), title=None),
        color=alt.Color('party', scale=alt.Scale(domain=list(cmap.keys()), range=list(cmap.values())))
    )

    # Save it as an HTML file.
    chart.save('altair-elections.html')

Полный гид и пример кода: настройки с помощью слоя>

Пигал фокусируется на визуальном внешнем виде. По умолчанию он производит участки SVG, так что вы можете увеличить их навсегда – или распечатать их – без их пикселирования. Графики пигалов также поставляются со встроенными хорошими функциями интерактивности, что делает Pygal еще одним недооцененным кандидатом, если вы хотите встроить участки в веб-приложение.

Вот график результатов выборов в Pygal:

 import pygal
    from pygal.style import Style
    from votes import wide as df

    # Define the style
    custom_style = Style(
        colors=('#0343df', '#e50000', '#ffff14', '#929591')
        font_family='Roboto,Helvetica,Arial,sans-serif',
        background='transparent',
        label_font_size=14,
    )

    # Set up the bar plot, ready for data
    c = pygal.Bar(
        title="UK Election Results",
        style=custom_style,
        y_title='Seats',
        width=1200,
        x_label_rotation=270,
    )

    # Add four data sets to the bar plot
    c.add('Conservative', df['conservative'])
    c.add('Labour', df['labour'])
    c.add('Liberal', df['liberal'])
    c.add('Others', df['others'])

    # Define the X-labels
    c.x_labels = df['year']

    # Write this to an SVG file
    c.render_to_file('pygal.svg')

Полный гид и пример код: настройки с помощью Pygal>

Панды чрезвычайно популярная библиотека данных для Python. Это позволяет вам делать всевозможные манипуляции с данными масштабильно, но также имеет удобный API. Поскольку он работает непосредственно на рамках данных, наш пример Pandas является наиболее кратким фрагментом кода в этой статье – даже короче, чем Seaborn!

Pandas API представляет собой обертку вокруг Matplotlib, поэтому вы также можете использовать базовый API Matplotlib, чтобы получить мелкозернистый контроль над вашими графиками.

Вот сюжет в пандах. Код прекрасно лаконичен!

    from matplotlib.colors import ListedColormap
    from votes import wide as df

    cmap = ListedColormap(['#0343df', '#e50000', '#ffff14', '#929591'])

    ax = df.plot.bar(x='year', colormap=cmap)

    ax.set_xlabel(None)
    ax.set_ylabel('Seats')
    ax.set_title('UK election results')

    plt.show()

Полный гид и пример кода: настрой с пандами>

Anvil-это система для создания веб-приложений с полным стеком, не имеющим ничего, кроме Python-JavaScript не требуется!

Вы можете использовать любую из библиотек, о которых я говорил в этой статье, чтобы создать сюжеты на наковальни и отобразить их в веб -браузере. Это здорово для Здание мониторных панелей :

В каждом из подробных руководств о Matplotlib , Старший , Seaborn В Боке , Altair и Пигал , вы найдете пример веб -приложения, которое вы можете открыть и отредактировать в Anvil, показывая вам, как использовать каждую из этих библиотек Python.

Вы также можете найти консультант по конванию в Руководство по заговору на наковальнике . В нем рассказывается, как использовать сюжеты из каждой из библиотек, упомянутых в этой статье в вашем приложении Anvil, включая полностью переднюю версию Python Python.

Оригинал: “https://dev.to/meredydd/7-great-plotting-libraries-for-python-compared-with-guides-for-each-3047”