Сюжет для скрипки с использованием Seaborn

Manav Narula 16 Июль 2021
Сюжет для скрипки с использованием Seaborn

Функция violinplot() создает такой график и изображает распределение как комбинацию между графиком плотности ядра и коробчатой ​​диаграммой. Он широко используется аналитиками и статистиками для понимания распределения категориальных данных. Его главное преимущество перед традиционными коробчатыми диаграммами состоит в том, что их можно также использовать для распределений с несколькими пиками.

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

информация о фигуре скрипки

Помимо DataFrames, функция violinplot() может работать с одним объектом серии, массивом numpy или вектором списка.

В следующем примере мы построим график распределения скрипичного графика для одной переменной.

import random 
import numpy as np
n = random.sample(range(0,50),30) 
arr = np.array(n)
sns.violinplot(n)

сценарий скрипки в море

Обратите внимание, что размер выборки имеет огромное влияние на окончательную фигуру в сюжете скрипки. Сюжет может вводить в заблуждение из-за небольшого размера выборки. Если это все еще немного сбивает с толку, можно построить простой график рассеяния по сценарию скрипки, чтобы лучше понять.

Например,

import random 
import numpy as np
n = random.sample(range(0,50),30) 
arr = np.array(n)
sns.violinplot(n)
sns.stripplot(n, color = 'red')

сценарий скрипки в морском стиле с другим размером выборки

Функция stripplot() здесь строит диаграмму разброса по сюжету скрипки. Точно так же вы можете нанести коробчатый график поверх скрипичного, чтобы понять сходство и различия между ними обоими.

Основное применение violinplot() - это наборы данных, показывающие распределение данных по нескольким категориям. В приведенном ниже коде мы реализуем это.

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

df = pd.DataFrame({"Quantity": [5,6,7,8,5,6,7,8,5,6,7,8,5,6,7,8],
                   "Price": [9,10,15,16,13,14,15,18,11,12,14,15,16,17,18,19],
                   "Day" : [1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2],
                   "Product": ['A','A','A','A','B','B','B','B',
                              'A','A','A','A','B','B','B','B']})

sns.violinplot(data = df, y = "Price", x = "Quantity", hue = "Product")

Сюжет скрипки в море, показывающий распределение данных

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

Можно использовать множество других аргументов, чтобы изменить окончательную цифру. Мы можем использовать параметр split, чтобы легко сравнивать категории. Их порядком можно управлять с помощью параметра order. Каждое наблюдение можно отобразить внутри графика с помощью параметра inner.

В приведенном ниже коде мы пытаемся использовать некоторые из этих аргументов.

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

df = pd.DataFrame({"Quantity": [5,6,7,8,5,6,7,8,5,6,7,8,5,6,7,8],
                   "Price": [9,10,15,16,13,14,15,18,11,12,14,15,16,17,18,19],
                   "Day" : [1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2],
                   "Product": ['A','A','A','A','B','B','B','B',
                              'A','A','A','A','B','B','B','B']})

sns.violinplot(data = df, y = "Price", x = "Quantity", hue = "Product", inner = 'stick', split = True)

скрипичный сюжет в морском стиле с внутренним параметром

Функция violinplot() возвращает объект типа оси matplotlib, чтобы использовать все такие функции matplotlib для настройки окончательного рисунка. Если мы хотим вернуть объект типа FacetGrid, мы можем использовать функцию catplot() и указать параметр kind как violin.

Author: Manav Narula
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn