Гистограммы Matplotlib

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

Введение

В этой лабораторной работе вы научитесь создавать и настраивать гистограммы с помощью Matplotlib, одной из самых популярных библиотек для визуализации данных в Python. Гистограмма — это мощный инструмент для визуализации распределения числового набора данных. Она группирует числа в диапазоны (или "корзины") и отображает частоту попадания точек данных в каждую корзину.

Вы выполните следующие шаги:

  1. Сгенерируете пример данных с помощью NumPy.
  2. Создадите базовую гистограмму.
  3. Настроите количество корзин.
  4. Измените цвет и стиль границ столбцов гистограммы.
  5. Нормализуете гистограмму для отображения плотности вероятности.

К концу этой лабораторной работы вы сможете создавать информативные и визуально привлекательные гистограммы для ваших проектов по анализу данных. Все графики будут сохранены в виде файлов изображений, которые вы сможете просмотреть непосредственно в LabEx WebIDE.

Генерация выборочных данных с помощью numpy.random

На этом шаге вы сгенерируете набор выборочных данных, которые мы сможем использовать для построения гистограммы. Мы будем использовать библиотеку NumPy, которая является фундаментальным пакетом для научных вычислений в Python. Она предоставляет высокопроизводительный объект многомерного массива и инструменты для работы с этими массивами.

Мы будем использовать функцию numpy.random.normal() для генерации данных, следующих нормальному (или гауссову) распределению. Это распространенный тип распределения данных, встречающийся во многих реальных сценариях.

Сначала откройте файл main.py в файловом проводнике слева от WebIDE. Затем добавьте в него следующий код. Этот код импортирует библиотеку numpy и сгенерирует 1000 случайных чисел со средним значением 0 и стандартным отклонением 1.

import numpy as np

## Generate 1000 data points from a normal distribution
## with a mean (loc) of 0 and a standard deviation (scale) of 1.
data = np.random.normal(loc=0, scale=1, size=1000)

print("Sample data generated successfully.")

Чтобы запустить скрипт, откройте терминал в WebIDE (Terminal -> New Terminal) и выполните следующую команду. Ваша рабочая директория уже установлена как /home/labex/project.

python3 main.py

Вы увидите подтверждающее сообщение в терминале.

Sample data generated successfully.

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

Построение гистограммы с помощью plt.hist(data)

На этом шаге вы создадите свою первую гистограмму. Мы будем использовать модуль matplotlib.pyplot, который предоставляет простой интерфейс для создания графиков. Обычно он импортируется с псевдонимом plt.

Основная функция для создания гистограммы — plt.hist(). В простейшем случае она принимает один аргумент: массив данных, который вы хотите построить.

Поскольку мы находимся в неинтерактивной среде, мы не можем отобразить график напрямую с помощью plt.show(). Вместо этого мы должны сохранить график в файл с помощью plt.savefig().

Обновите файл main.py следующим кодом. Он добавляет логику построения графиков Matplotlib к коду генерации данных из предыдущего шага.

import numpy as np
import matplotlib.pyplot as plt

## Generate sample data
data = np.random.normal(loc=0, scale=1, size=1000)

## Create a histogram
plt.hist(data)

## Save the plot to a file
plt.savefig('/home/labex/project/histogram.png')

print("Basic histogram saved to histogram.png")

Теперь снова запустите скрипт из терминала:

python3 main.py

Вы должны увидеть следующий вывод:

Basic histogram saved to histogram.png

В файловом проводнике слева появится новый файл с именем histogram.png. Дважды щелкните по нему, чтобы открыть и просмотреть вашу первую гистограмму. Она покажет распределение частот сгенерированных вами случайных данных.

Histogram

Установка количества интервалов (bins) с помощью параметра bins

На этом шаге вы научитесь контролировать детализацию вашей гистограммы, устанавливая количество интервалов (bins). "Интервал" (bin) — это промежуток, представляющий диапазон данных. Количество интервалов может существенно повлиять на интерпретацию распределения. Слишком малое количество интервалов может скрыть важные детали, в то время как слишком большое может создать зашумленный график.

Функция plt.hist() в Matplotlib имеет параметр bins, который позволяет указать количество интервалов. По умолчанию Matplotlib выбирает разумное количество, но часто вам потребуется его изменить.

Давайте изменим код, чтобы создать гистограмму с 30 интервалами. Мы также сохраним ее в новый файл, histogram_bins.png, чтобы сравнить с предыдущим графиком.

Обновите файл main.py следующим образом:

import numpy as np
import matplotlib.pyplot as plt

## Generate sample data
data = np.random.normal(loc=0, scale=1, size=1000)

## Create a histogram with 30 bins
plt.hist(data, bins=30)

## Save the plot to a new file
plt.savefig('/home/labex/project/histogram_bins.png')

print("Histogram with 30 bins saved to histogram_bins.png")

Запустите скрипт из терминала:

python3 main.py

Вывод будет следующим:

Histogram with 30 bins saved to histogram_bins.png

Теперь найдите histogram_bins.png в файловом проводнике и откройте его. Сравните его с первой гистограммой. Вы должны заметить, что столбцы стали уже, предоставляя более детальный вид распределения данных.

Histogram with 30 bins

Настройка цвета и цвета границ гистограммы

На этом шаге вы настроите внешний вид гистограммы. Хорошо оформленный график легче читать и он выглядит более профессионально. Функция plt.hist() предлагает несколько параметров для стилизации, включая color для заливки столбцов и edgecolor для границ столбцов.

Давайте изменим цвет столбцов на светло-голубой и добавим черные границы, чтобы каждый интервал выделялся более четко.

Измените файл main.py, чтобы включить эти новые параметры. Мы сохраним этот настроенный график в файл histogram_color.png.

import numpy as np
import matplotlib.pyplot as plt

## Generate sample data
data = np.random.normal(loc=0, scale=1, size=1000)

## Create a histogram with 30 bins, custom color, and edgecolor
plt.hist(data, bins=30, color='skyblue', edgecolor='black')

## Save the plot to a new file
plt.savefig('/home/labex/project/histogram_color.png')

print("Styled histogram saved to histogram_color.png")

Выполните скрипт в терминале:

python3 main.py

Вы увидите следующее сообщение:

Styled histogram saved to histogram_color.png

Откройте только что созданный файл histogram_color.png. Вы увидите гораздо более отполированную гистограмму со светло-голубыми столбцами и четкими черными контурами.

Styled histogram

Нормализация гистограммы с помощью density=True

На этом шаге вы научитесь создавать нормализованную гистограмму. По умолчанию ось Y гистограммы представляет количество точек данных в каждом интервале. Однако иногда бывает полезнее рассматривать распределение как плотность вероятности. В нормализованной гистограмме высота каждого столбца корректируется таким образом, чтобы общая площадь всех столбцов равнялась 1.

Это достигается путем установки параметра density в значение True в функции plt.hist(). Также хорошей практикой является добавление подписей (labels) и заголовка к вашему графику, чтобы он был самодостаточным.

Давайте обновим скрипт, чтобы создать нормализованную гистограмму и добавить описательные подписи.

import numpy as np
import matplotlib.pyplot as plt

## Generate sample data
data = np.random.normal(loc=0, scale=1, size=1000)

## Create a normalized histogram
plt.hist(data, bins=30, color='skyblue', edgecolor='black', density=True)

## Add title and labels
plt.title('Normalized Histogram of Sample Data')
plt.xlabel('Value')
plt.ylabel('Probability Density')

## Save the plot to a new file
plt.savefig('/home/labex/project/histogram_normalized.png')

print("Normalized histogram saved to histogram_normalized.png")

Запустите финальную версию вашего скрипта:

python3 main.py

Вывод будет следующим:

Normalized histogram saved to histogram_normalized.png

Откройте файл histogram_normalized.png. Обратите внимание, что значения по оси Y теперь намного меньше. Они представляют плотность вероятности, а не сырые количества. Общая форма распределения остается прежней, но масштаб теперь стандартизирован, что полезно для сравнения распределений наборов данных разного размера.

Normalized histogram

Резюме

Поздравляем с завершением этой лабораторной работы! Вы освоили основные навыки создания и настройки гистограмм с помощью Matplotlib в Python.

В этой лабораторной работе вы:

  • Сгенерировали пример данных с использованием numpy.random.normal().
  • Построили базовую гистограмму с помощью plt.hist().
  • Управляли количеством интервалов (bins) с помощью параметра bins.
  • Стилизовали вашу гистограмму с помощью параметров color и edgecolor.
  • Создали нормализованную гистограмму плотности вероятности, используя density=True.
  • Добавили заголовок и подписи к вашему графику для лучшего контекста.

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