Сюжет для скрипки Matplotlib - Учебное пособие и примеры

Введение В Python существует множество библиотек визуализации данных, но Matplotlib - самая популярная из них. Популярность Matplotlib объясняется его надежностью и полезностью - он может создавать как простые, так и сложные графики с небольшим количеством кода. Вы также можете настроить графики различными способами. В этом уроке мы расскажем, как построить скрипичные сюжеты в Matplotlib. > Графики скрипки используются для визуализации распределения данных, отображения диапазона, медианы и распределения

Вступление

В Python есть много библиотек визуализации данных, но Matplotlib - самая популярная из них. Популярность Matplotlib объясняется его надежностью и полезностью - он может создавать как простые, так и сложные графики с небольшим количеством кода. Вы также можете настроить графики различными способами.

В этом уроке мы расскажем, как построить скрипичные сюжеты в Matplotlib .

Графики скрипки используются для визуализации распределения данных, отображения диапазона, медианы и распределения данных.

Графики скрипки показывают ту же сводную статистику, что и коробчатые диаграммы, но они также включают оценки плотности ядра, которые представляют форму / распределение данных.

Импорт данных

Прежде чем мы сможем создать график скрипки, нам потребуются некоторые данные для построения. Мы будем использовать набор данных Gapminder .

Мы начнем с импорта необходимых нам библиотек, в том числе Pandas и Matplotlib:

 import pandas as pd 
 import matplotlib.pyplot as plt 

Мы проверим, нет ли отсутствующих записей данных, и распечатаем заголовок набора данных, чтобы убедиться, что данные были загружены правильно. Обязательно установите тип кодировки ISO-8859-1 :

 dataframe = pd.read_csv("gapminder_full.csv", error_bad_lines=False, encoding="ISO-8859-1") 
 print(dataframe.head()) 
 print(dataframe.isnull().values.any()) 

 country year population continent life_exp gdp_cap 
 0 Afghanistan 1952 8425333 Asia 28.801 779.445314 
 1 Afghanistan 1957 9240934 Asia 30.332 820.853030 
 2 Afghanistan 1962 10267083 Asia 31.997 853.100710 
 3 Afghanistan 1967 11537966 Asia 34.020 836.197138 
 4 Afghanistan 1972 13079460 Asia 36.088 739.981106 

Создание сюжета для скрипки в Матплотлибе

Чтобы создать сценарий скрипки в Matplotlib, мы вызываем violinplot() либо для Axes , либо для самого экземпляра PyPlot:

 import pandas as pd 
 import matplotlib.pyplot as plt 
 
 dataframe = pd.read_csv("gapminder_full.csv", error_bad_lines=False, encoding="ISO-8859-1") 
 
 population = dataframe.population 
 life_exp = dataframe.life_exp 
 gdp_cap = dataframe.gdp_cap 
 
 # Extract Figure and Axes instance 
 fig, ax = plt.subplots() 
 
 # Create a plot 
 ax.violinplot([population, life_exp, gdp_cap]) 
 
 # Add title 
 ax.set_title('Violin Plot') 
 plt.show() 

скрипка matplotlibсюжет{.ezlazyload}

Когда мы создаем первый график, мы можем видеть распределение наших данных, но мы также заметим некоторые проблемы. Из-за того, что масштаб характеристик настолько разный, практически невозможно распределить столбцы «Ожидаемая продолжительность жизни» и « ВВП».

По этой причине мы хотим построить каждый столбец на отдельном подзаголовке.

Мы сделаем небольшую сортировку и нарезку фрейма данных, чтобы упростить сравнение столбцов набора данных. Мы сгруппируем фрейм данных по «стране» и выберем только самые последние / последние записи для каждой из стран.

Затем мы отсортируем по совокупности и отбросим записи с наибольшей совокупностью (большие выбросы по совокупности), чтобы остальная часть фрейма данных находилась в более похожем диапазоне и сравнения были проще:

 dataframe = dataframe.groupby("country").last() 
 dataframe = dataframe.sort_values(by=["population"], ascending=False) 
 dataframe = dataframe.iloc[10:] 
 print(dataframe) 

Теперь фрейм данных выглядит примерно так:

 year population continent life_exp gdp_cap 
 country 
 Philippines 2007 91077287 Asia 71.688 3190.481016 
 Vietnam 2007 85262356 Asia 74.249 2441.576404 
 Germany 2007 82400996 Europe 79.406 32170.374420 
 Egypt 2007 80264543 Africa 71.338 5581.180998 
 Ethiopia 2007 76511887 Africa 52.947 690.805576 
 ... ... ... ... ... ... 
 Montenegro 2007 684736 Europe 74.543 9253.896111 
 Equatorial Guinea 2007 551201 Africa 51.579 12154.089750 
 Djibouti 2007 496374 Africa 54.791 2082.481567 
 Iceland 2007 301931 Europe 81.757 36180.789190 
 Sao Tome and Principe 2007 199579 Africa 65.528 1598.435089 

Большой! Теперь мы можем создать фигуру и объекты с тремя осями с помощью функции subplots() . На каждой из этих осей будет скрипичный сюжет. Поскольку сейчас мы работаем над гораздо более управляемым масштабом, давайте также showmedians аргумент showmedians, установив для него значение True .

Это проведет горизонтальную линию в середине наших скрипичных сюжетов:

 # Create figure with three axes 
 fig, (ax1, ax2, ax3) = plt.subplots(nrows=1, ncols=3) 
 
 # Plot violin plot on axes 1 
 ax1.violinplot(dataframe.population, showmedians=True) 
 ax1.set_title('Population') 
 
 # Plot violin plot on axes 2 
 ax2.violinplot(life_exp, showmedians=True) 
 ax2.set_title('Life Expectancy') 
 
 # Plot violin plot on axes 3 
 ax3.violinplot(gdp_cap, showmedians=True) 
 ax3.set_title('GDP Per Cap') 
 
 plt.show() 

Запуск этого кода теперь дает нам:

график скрипки matplotlib показываетмедианы{.ezlazyload}

Теперь мы можем получить хорошее представление о распределении наших данных. Центральная горизонтальная линия на скрипках - это то место, где расположена медиана наших данных, а минимальные и максимальные значения указаны положениями линий на оси Y.

Настройка сюжетов скрипки в Matplotlib

Теперь давайте посмотрим, как мы можем настроить скрипичные сюжеты.

Добавление отметок X и Y

Как видите, хотя графики были успешно сгенерированы, без меток на осях X и Y может быть сложно интерпретировать график. Людям гораздо легче интерпретировать категориальные значения, чем числовые.

Мы можем настроить график и добавить метки к оси X с помощью функции set_xticks() :

 fig, ax = plt.subplots() 
 ax.violinplot(gdp_cap, showmedians=True) 
 ax.set_title('violin plot') 
 ax.set_xticks([1]) 
 ax.set_xticklabels(["Country GDP",]) 
 plt.show() 

Это приводит к:

добавить отметки x и y к графикам скрипки вmatplotlib{.ezlazyload}

Здесь мы установили X-метки из диапазона в один, посередине, и добавили метку, которую легко интерпретировать.

Построение горизонтального участка скрипки в Matplotlib

Если бы мы хотели, мы также могли бы изменить ориентацию графика, изменив параметр vert vert определяет, отображается ли график вертикально, и по умолчанию для True

 fig, ax = plt.subplots() 
 ax.violinplot(gdp_cap, showmedians=True, vert=False) 
 ax.set_title('violin plot') 
 ax.set_yticks([1]) 
 ax.set_yticklabels(["Country GDP",]) 
 ax.tick_params(axis='y', labelrotation = 90) 
 plt.show() 

сюжет горизонтальный сюжет скрипки вmatplotlib{.ezlazyload}

Здесь мы установили метки деления оси Y и их частоту вместо оси X. Мы также повернули этикетки на 90 градусов.

Отображение средств набора данных в сюжетах скрипки

Нам также доступны некоторые другие параметры настройки. showmean в дополнение к медианам с помощью параметра showmean.

Давайте попробуем визуализировать средние значения в дополнение к медианам:

 fig, (ax1, ax2, ax3) = plt.subplots(nrows=1, ncols=3) 
 ax1.violinplot(population, showmedians=True, showmeans=True, vert=False) 
 ax1.set_title('Population') 
 
 ax2.violinplot(life_exp, showmedians=True, showmeans=True, vert=False) 
 ax2.set_title('Life Expectancy') 
 
 ax3.violinplot(gdp_cap, showmedians=True, showmeans=True, vert=False) 
 ax3.set_title('GDP Per Cap') 
 plt.show() 

показать средства набора данных в графике скрипки вmatplotlib{.ezlazyload}

Однако обратите внимание, что, поскольку медианы и средние значения по существу выглядят одинаково, может стать неясным, какая вертикальная линия здесь относится к медиане, а какая к среднему.

Настройка оценки плотности ядра для графиков скрипки

Мы также можем изменить, сколько точек данных учитывает модель при создании оценок плотности ядра Гаусса, изменив параметр points

По умолчанию учитывается 100 баллов. Предоставляя функции меньшее количество точек данных для оценки, мы можем получить менее репрезентативное распределение данных.

Давайте изменим это число, скажем, на 10:

 fig, ax = plt.subplots() 
 ax.violinplot(gdp_cap, showmedians=True, points=10) 
 ax.set_title('violin plot') 
 ax.set_xticks([1]) 
 ax.set_xticklabels(["Country GDP",]) 
 plt.show() 

настроить оценку плотности ядра для графиков скрипки вmatplotlib{.ezlazyload}

Обратите внимание, что форма скрипки менее гладкая, поскольку было выбрано меньшее количество точек.

Как правило, вы хотите увеличить количество используемых точек, чтобы лучше понять распределение. Это может быть не всегда так, если 100 достаточно просто. Давайте построим график скрипки с 10, 100 и 500 точками:

 fig, (ax1, ax2, ax3) = plt.subplots(nrows=1, ncols=3) 
 ax1.violinplot(gdp_cap, showmedians=True, points=10) 
 ax1.set_title('GDP Per Cap, 10p') 
 
 ax2.violinplot(gdp_cap, showmedians=True, points=100) 
 ax2.set_title('GDP Per Cap, 100p') 
 
 ax3.violinplot(gdp_cap, showmedians=True, points=500) 
 ax3.set_title('GDP Per Cap, 500p') 
 plt.show() 

Это приводит к:

различные размеры выборки KDE для скрипичногосюжета{.ezlazyload}

Между вторым и третьим сюжетами нет очевидной разницы, но есть существенная разница между первым и вторым.

Заключение

В этом уроке мы рассмотрели несколько способов построить сценарий скрипки с помощью Matplotlib и Python. Мы также рассмотрели, как настроить их, добавив отметки X и Y, построив горизонтальный график, показав средства набора данных, а также изменив выборку точек KDE.

Если вас интересует визуализация данных и вы не знаете, с чего начать, обязательно ознакомьтесь с нашим комплектом книг по визуализации данных в Python{.ebook-link} :

::: {style=“border: 1px solid #ebebeb;padding: 15px;"} {.ebook-link}

Визуализация данных в Python

::: {.row} ::: {.col-md-4 .col-xs-12} {.img-responsive .center-block} :::

::: {.col-md-8 .col-xs-12 .my-auto} Станьте опасными с визуализацией данных

✅ 30-дневная гарантия возврата денег без вопросов

✅ от начального до продвинутого

✅ Регулярно обновляется бесплатно (последнее обновление в апреле 2021 г.)

✅ Обновлено с бонусными ресурсами и руководствами ::: ::: :::

Визуализация данных в Python с помощью Matplotlib и Pandas - это книга, предназначенная для абсолютных новичков в работе с Pandas и Matplotlib с базовыми знаниями Python и позволяющая им создать прочную основу для расширенной работы с этими библиотеками - от простых графиков до анимированных трехмерных графиков с интерактивными кнопки.

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

Книга «Визуализация данных в Python» , книга для начинающих и средних разработчиков Python, проведет вас через простые манипуляции с данными с помощью Pandas, охватит основные библиотеки построения графиков, такие как Matplotlib и Seaborn, и покажет, как использовать преимущества декларативных и экспериментальных библиотек, таких как Altair. В частности, на протяжении 11 глав эта книга охватывает 9 библиотек Python: Pandas, Matplotlib, Seaborn, Bokeh, Altair, Plotly, GGPlot, GeoPandas и VisPy.

Он служит уникальным практическим руководством по визуализации данных в виде множества инструментов, которые вы можете использовать в своей карьере.

comments powered by Disqus