Настройка визуализаций violin plot

PythonPythonBeginner
Практиковаться сейчас

This tutorial is from open-source community. Access the source code

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

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

Советы по работе с ВМ

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

Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook полностью загрузится. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.

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

Создание тестовых данных

Сначала мы создадим некоторые тестовые данные, которые будем использовать для violin plot. Мы будем использовать NumPy для генерации четырех массивов по 100 нормально распределенных значений с возрастающими стандартными отклонениями.

import matplotlib.pyplot as plt
import numpy as np

## create test data
np.random.seed(19680801)
data = [sorted(np.random.normal(0, std, 100)) for std in range(1, 5)]

Создание стандартного violin plot

Далее мы создадим стандартный violin plot с использованием функции violinplot Matplotlib. Это будет служить базовой линией для сравнения, когда мы будем настраивать график в последующих шагах.

## create default violin plot
fig, ax1 = plt.subplots()
ax1.set_title('Default Violin Plot')
ax1.set_ylabel('Observed Values')
ax1.violinplot(data)

Настройка внешнего вида violin plot

Теперь мы настроим внешний вид violin plot. Во - первых, мы ограничим то, что Matplotlib рисует, установив аргументы showmeans, showmedians и showextrema в значение False. Затем мы изменим цвет и непрозрачность тел violin plot с использованием методов set_facecolor и set_alpha. Наконец, мы добавим упрощенное представление box plot поверх violin plot, используя функцию percentile из NumPy для вычисления квартилей, медиан и усов.

## customize violin plot appearance
fig, ax2 = plt.subplots()
ax2.set_title('Customized Violin Plot')
ax2.set_ylabel('Observed Values')

## create violin plot
parts = ax2.violinplot(
        data, showmeans=False, showmedians=False,
        showextrema=False)

## customize violin bodies
for pc in parts['bodies']:
    pc.set_facecolor('#D43F3A')
    pc.set_edgecolor('black')
    pc.set_alpha(1)

## add box plot
quartile1, medians, quartile3 = np.percentile(data, [25, 50, 75], axis=1)
whiskers = np.array([
    adjacent_values(sorted_array, q1, q3)
    for sorted_array, q1, q3 in zip(data, quartile1, quartile3)])
whiskers_min, whiskers_max = whiskers[:, 0], whiskers[:, 1]

inds = np.arange(1, len(medians) + 1)
ax2.scatter(inds, medians, marker='o', color='white', s=30, zorder=3)
ax2.vlines(inds, quartile1, quartile3, color='k', linestyle='-', lw=5)
ax2.vlines(inds, whiskers_min, whiskers_max, color='k', linestyle='-', lw=1)

Настройка стиля осей

Наконец, мы настроим стиль для оси x, указав метки делений и пределы. Мы определим вспомогательную функцию set_axis_style, чтобы это сделать.

## set style for the axes
labels = ['A', 'B', 'C', 'D']
set_axis_style(ax2, labels)

def set_axis_style(ax, labels):
    ax.set_xticks(np.arange(1, len(labels) + 1))
    ax.set_xticklabels(labels)
    ax.set_xlim(0.25, len(labels) + 0.75)
    ax.set_xlabel('Sample Name')

Резюме

В этом практическом занятии мы узнали, как настраивать внешний вид violin plot с использованием Matplotlib. Мы создали стандартный violin plot, а затем модифицировали его, изменив цвет и непрозрачность тел violin plot и добавив наверх упрощенное представление box plot. Мы также настроили стиль для меток делений оси x и ее пределы. Настраивая внешний вид графика, мы можем создавать более информативные и визуально привлекательные визуализации.