</>
Topic 4 of 5

Course materials are currently available in Russian only.

Гистограмма и точечный график

Когда данных много, полезно посмотреть на их распределение: какие значения встречаются часто, какие редко. А когда у каждого объекта два числа — например, рост и вес, — интересна связь между ними. Для этого есть гистограммы и точечные графики.

Гистограмма

Гистограмма делит диапазон значений на интервалы и показывает, сколько значений попало в каждый:

import matplotlib.pyplot as plt

ages = [12, 15, 14, 13, 18, 22, 25, 14, 16, 13, 30, 15]
plt.hist(ages, bins=4)
plt.xlabel("Возраст")
plt.ylabel("Человек")

Параметр bins:

  • число — диапазон от минимума до максимума данных делится на столько равных интервалов;
  • список границ — интервалы задаются явно: bins=[10, 15, 20, 25, 30].

Каждый интервал включает левую границу и не включает правую: значение 15 при границах [10, 15, 20] попадёт во второй интервал. Исключение — последний интервал: его правая граница включена.

plt.hist возвращает три объекта: количества в интервалах, границы и сами столбцы:

counts, edges, bars = plt.hist(ages, bins=[10, 20, 30])
print(counts)    # [9. 3.]
print(edges)     # [10. 20. 30.]

Оформление: color, edgecolor="black" (видны границы столбцов), alpha=0.5 (полупрозрачность — удобно наложить две гистограммы).

Сколько интервалов выбрать

Слишком мало интервалов — теряются детали, слишком много — график «шумит». Для нескольких сотен значений обычно хватает 10–30. Если у значений естественные границы (баллы по десяткам, возраст по годам), лучше задать границы списком.

Точечный график

plt.scatter(x, y) ставит точку для каждой пары значений — без линий:

hours = [1, 2, 2, 3, 4, 5, 6]
score = [52, 55, 61, 64, 70, 78, 85]
plt.scatter(hours, score)
plt.xlabel("Часов подготовки")
plt.ylabel("Балл")

Такой график показывает связь: если точки выстраиваются вдоль наклонной линии, величины связаны.

Цвет и размер каждой точки

Главное преимущество scatter — можно задать свой цвет и размер для каждой точки:

colors = ["green" if s >= 60 else "gray" for s in score]
sizes = [h * 20 for h in hours]
plt.scatter(hours, score, c=colors, s=sizes)
  • c — цвет: один для всех или список по точке;
  • s — площадь маркера: число или список;
  • alpha — прозрачность, marker — форма точки.

Если c — список чисел, а не названий цветов, точки раскрашиваются по шкале, а plt.colorbar() покажет эту шкалу.

Итог

  • plt.hist(данные, bins=...) — гистограмма; число bins — равные интервалы от min до max, список — свои границы;
  • интервалы [левая, правая), у последнего правая граница включена;
  • plt.scatter(x, y) — точки без линий для поиска связи между величинами;
  • c и s — цвет и размер каждой точки.