Matplotlib — графики

Приветствую! Здесь вы наверняка найдете, что ищете. Примеры в лаборатории рассчитаны на то, что мы разбираем что-то конкретное.

Текущая статья посвящена примерам: графиков Matplotlib на Python.

Поэтому за теорией по текущей теме вам — в энциклопедию. Если ещё не погружались, то маршрут прост:

  1. Основы
  2. Система и сеть
  3. Данные и разметка
  4. Код и разработка
  5. Языки
  6. Искусственный интеллект
  7. Проект
  8. Инфраструктура и безопасность
  9. Спин-офф

Обязательно пройдитесь.

А теперь приступим к нашему предмету.


Основы графиков на Python

Matplotlib — главная библиотека Python для построения графиков: линии, столбцы, точки, гистограммы, круговые диаграммы. Её используют в школе (график функции, лабораторная по физике), в вузе (курсовые, статистика) и на работе (отчёты, анализ данных).

С чего начать

Теория — Matplotlib — графики (архитектура, pyplot, экспорт).

Массивы для осей X и Y — примеры NumPy.

Символьные формулы (корни, производные) перед графиком — SymPy — уравнения и производные.

Таблицы перед графиком — примеры Pandas, NumPy и pandas.

Рисование фигур «от руки» — примеры Turtle (Python) или p5.js (браузер).

Здесь — графики по числам: оси X и Y, подписи, легенда.

Как запустить пример

  1. Установите библиотеки (один раз в терминале или командной строке):
pip install matplotlib numpy
  1. Скопируйте код в файл, например grafik.py.
  2. Запустите: python grafik.py — откроется окно с графиком.
  3. В Google Colab или Jupyter Notebook вместо plt.show() график часто появляется прямо под ячейкой; show() тоже можно оставить.

Базовые термины

Термин Простыми словами
Figure «Лист» или окно, на котором рисуем
Axes Область с осями X и Y — сам график
plt.plot() Линия по точкам
plt.bar() Столбцы (столбчатая диаграмма)
plt.scatter() Точки (диаграмма рассеяния)
plt.hist() Гистограмма — сколько значений попало в каждый интервал
plt.show() Показать график на экране
label + legend() Подпись серии и легенда (что означает каждая линия)

Какой график выбрать

Задача Что рисовать Функция
График функции (sin, x², физика) Линия plot
Сравнить категории (языки, оценки) Столбцы bar / barh
Связь двух величин (рост и вес) Точки scatter
Распределение (сколько пятёрок, четвёрок) Гистограмма hist
Доли целого (100% = круг) Круговая pie
Несколько графиков на одном листе Подграфики subplots

Обязательные элементы

Любой скрипт с Matplotlib строится по одной схеме: данные → рисование → подписи → показ.

Разбор:

  • import matplotlib.pyplot as plt — подключаем pyplot и пишем коротко plt вместо длинного имени; это стандарт в учебниках и на Stack Overflow.
  • import numpy as np — NumPy считает sin, cos, массивы точек; Matplotlib только рисует.
  • np.linspace(0, 10, 100) — 100 равных шагов от 0 до 10 по оси X; линия получается гладкой, без «ломаных».
  • np.sin(x) — для каждой точки X считается Y; пишем формулу один раз — NumPy применяет её ко всему массиву.
  • plt.plot(x, y) — соединяет пары (x, y) линией.
  • xlabel, ylabel, title — подписи осей и заголовок; в отчёте обязательны.
  • grid(True) — сетка; проще читать значения с осей.
  • plt.show() — в обычном .py-файле без этой строки окно может мелькнуть и сразу закрыться.
Типичные ошибки новичков
  • Забыли plt.show() — «ничего не видно».
  • Перепутали порядок: сначала plot, потом подписи — порядок подписей не критичен, но show() всегда в конце.
  • Списки разной длины: x из 10 элементов, y из 8 — будет ошибка; длины должны совпадать.
  • Кириллица в подписях «квадратиками» — на Windows иногда нужен шрифт; для начала подойдут латинские подписи или plt.rcParams['font.family'] = 'DejaVu Sans'.

Стартовые графики

Пять типов, которые чаще всего ищут в интернете: линия, столбцы, точки, гистограмма, круговая.


Линейный график (sin, cos, любая функция)

Нужен, когда по оси X идёт время, угол или аргумент функции, а по Y — значение. Классика: синусоида, график из учебника алгебры.

Разбор:

  • 2 * np.pi — один полный период синуса (от 0 до 360° в радианах); 200 точек — линия гладкая.
  • color="steelblue" — цвет линии; можно "red", "#ff0000", "green".
  • linewidth=2 — толщина линии в пунктах.
  • label="sin(x)" — имя серии для легенды; без legend() подпись на графике не появится.
  • plt.axhline(0, ..) — горизонтальная линия y = 0 (ось абсцисс); удобно для синуса и косинуса.
  • alpha=0.3 у сетки — полупрозрачность 30%; сетка не перебивает сам график.

График параболы y = x² (частый школьный запрос)

Тот же plot, но данные можно задать списком Python — NumPy необязателен для простых задач.


import matplotlib.pyplot as plt

x = list(range(-5, 6))      # -5, -4, …, 5
y = [i ** 2 for i in x]       # y = x²

plt.plot(x, y, marker="o", color="darkorange")
plt.xlabel("x")
plt.ylabel("y = x²")
plt.title("Парабола")
plt.grid(True)
plt.show()

Разбор:

  • range(-5, 6) — целые x от −5 до 5 включительно; для параболы симметрично вокруг нуля.
  • [i ** 2 for i in x] — list comprehension: для каждого x считаем x²; это и есть «формула» на Python.
  • marker="o" — кружки в каждой точке; видно, что график построен по дискретным значениям (можно убрать для гладкой линии).

Для y = 2x + 3 или y = -x² + 4x меняйте только формулу в списке y.


Столбчатая диаграмма (bar chart)

Сравнение категорий: языки программирования, оценки по предметам, продажи по месяцам. Высота столбца = величина.


import matplotlib.pyplot as plt

categories = ["Python", "Java", "Go", "Rust"]
values = [29, 17, 12, 8]

plt.bar(categories, values, color=["#3776ab", "#b07219", "#00add8", "#dea584"])
plt.ylabel("Доля опроса, %")
plt.title("Популярность языков (условные данные)")
plt.show()

Разбор:

  • categories — подписи под столбцами (строки).
  • values — высота каждого столбца; порядок совпадает с categories: Python → 29, Java → 17 и т.д.
  • color=[..] — свой цвет каждому столбцу; один цвет: color="blue".
  • plt.ylabel — что измеряем по вертикали; для bar chart это главная ось смысла.

Школьный вариант: categories = ["Математика", "Физика", "Информатика"], values = [5, 4, 5] — оценки или баллы.


Диаграмма рассеяния (scatter plot)

Показывает, есть ли связь между двумя числами: чем больше X, тем больше Y? Точки «облаком» — типичная картина для лабораторных и статистики.


import matplotlib.pyplot as plt
import numpy as np

rng = np.random.default_rng(42)
x = rng.normal(0, 1, 120)
y = 0.6 * x + rng.normal(0, 0.5, 120)

plt.scatter(x, y, alpha=0.6, edgecolors="white", linewidths=0.5)
plt.xlabel("Признак A")
plt.ylabel("Признак B")
plt.title("Scatter — связь двух переменных")
plt.grid(True, alpha=0.3)
plt.show()

Разбор:

  • default_rng(42) — генератор случайных чисел с фиксированным seed; при 42 график каждый раз одинаковый (удобно для сдачи работы).
  • rng.normal(0, 1, 120) — 120 случайных X вокруг 0 с разбросом 1 (нормальное распределение).
  • y = 0.6 * x + .. — линейная зависимость плюс шум; облако тянется вверх вправо — положительная корреляция.
  • scatter рисует отдельные точки, линию между ними не проводит.
  • alpha=0.6 — полупрозрачные точки; при наложении видно плотность.

Гистограмма (histogram)

Сколько значений попало в каждый интервал (корзину). Пример: рост класса, баллы за тест, время отклика сервера.


import matplotlib.pyplot as plt
import numpy as np

data = np.random.default_rng(0).normal(loc=100, scale=15, size=500)

plt.hist(data, bins=25, color="teal", edgecolor="white")
plt.xlabel("Значение")
plt.ylabel("Частота")
plt.title("Распределение выборки")
plt.show()

Разбор:

  • normal(loc=100, scale=15, size=500) — 500 случайных чисел вокруг среднего 100, разброс ±15 (условные «баллы»).
  • bins=25 — разбить диапазон на 25 столбиков; больше bins — мельче детали, меньше — грубее картина.
  • hist возвращает высоты столбиков; ось Y — сколько значений попало в интервал, не сами значения.
  • edgecolor="white" — белая граница между столбиками, график читается лучше.

Свои данные: data = [4, 5, 3, 5, 5, 4, 3, 5, 5, 5] — оценки класса; bins=5 или bins=[2.5, 3.5, 4.5, 5.5].


Круговая диаграмма (pie chart)

Доли от целого в процентах: бюджет, состав команды, ответы опроса. Сумма секторов должна быть 100% (или библиотека нормализует сама).

Разбор:

  • sizes — величина каждого сектора; 40 + 30 + 15 + 15 = 100 — проценты.
  • explode=(0.05, 0, 0, 0) — первый сектор «отодвинут» от центра для акцента.
  • autopct="%1.0f%%" — подпись процента на секторе (%.0f — без дробной части).
  • startangle=90 — первый сектор начинается сверху (как на 12 часов).
  • axis("equal") — круг остаётся кругом, а не овалом.

Круговую диагramму с более чем 5–6 секторами читают хуже столбчатой; для отчёта часто лучше bar.


Примеры графиков

Ниже — готовые заготовки с разбором: можно копировать целиком и менять числа под свою задачу.


1. Базовые типы

1.1. Несколько функций на одном графике

Сравнение sin, cos или нескольких экспериментов на одних осях. Обязательны label и legend().

Разбор:

  • Три вызова plot на одних осях — три линии в одном окне.
  • linestyle="--" — пунктир для cos; можно "-" сплошная, ":" точки, "-." штрих-пунктир.
  • np.exp(-0.1 * x) — затухание амплитуды sin; пример из физики (колебания с трением).
  • legend() — блок «что какая линия»; без него подписи label не отображаются.

1.2. Горизонтальные столбцы (barh)

Те же столбцы, но лежат — удобно для длинных названий (навыки, фамилии, страны).


import matplotlib.pyplot as plt

skills = ["Git", "SQL", "Python", "Linux", "Docker"]
scores = [85, 78, 92, 70, 65]

plt.barh(skills, scores, color="cornflowerblue")
plt.xlabel("Балл")
plt.title("Навыки — горизонтальная диаграмма")
plt.xlim(0, 100)
plt.show()

Разбор:

  • barh — horizontal bar: первый аргумент — подписи по Y, второй — длина столбца по X.
  • xlim(0, 100) — ось от 0 до 100; шкала фиксирована, столбцы не «уплывают».

1.3. Групповые столбцы (две серии рядом)

Сравнение двух наборов по одним категориям: команда A и B по кварталам, мальчики и девочки по предметам.

Разбор:

  • np.arange(len(groups)) — позиции 0, 1, 2, 3 на оси X (без подписей пока).
  • width = 0.35 — ширина одного столбца; два столбца рядом помещаются в одну «клетку».
  • x - width/2 и x + width/2 — сдвиг влево и вправо, столбцы не накладываются.
  • fig, ax = plt.subplots() — объектный стиль: все команды через ax, а не plt; так проще несколько графиков на одном листе.
  • set_xticks + set_xticklabels — подписи Q1…Q4 в нужных позициях.

1.4. Заливка между двумя кривыми (fill_between)

Показывает полосу между двумя функциями: допуск, коридор погрешности, min–max.

Разбор:

  • fill_between(x, y1, y2) — закрашивает область между верхней и нижней линией.
  • alpha=0.25 — заливка полупрозрачная, линии sin/cos видны поверх.

2. Подграфики и компоновка

2.1. Сетка 2×2 (четыре графика на одном листе)

Один рисунок для отчёта: разные виды данных рядом.

Разбор:

  • subplots(2, 2) — сетка 2 строки × 2 столбца; axes[строка, столбец] — доступ к каждой ячейке.
  • figsize=(9, 7) — размер всего окна в дюймах (ширина, высота).
  • suptitle — общий заголовок над всеми подграфиками; set_title — заголовок одной ячейки.
  • x[::5] — каждая 5-я точка из x (меньше точек на scatter для наглядности).
  • tight_layout() — автоматически поджимает отступы, подписи не наезжают друг на друга.

2.2. Два графика друг под другом с общей осью X

Классика для временных рядов: сверху продажи, снизу возвраты; месяцы на одной шкале.

Разбор:

  • subplots(2, 1) — два графика вертикально (2 строки, 1 столбец).
  • sharex=True — ось X одна на оба; подписи месяцев только снизу, сверху не дублируются.
  • (ax1, ax2) — распаковка двух осей в переменные; так код читается проще, чем axes[0] и axes[1].
  • marker="o" — точки на линии продаж в каждом месяце.

3. Оформление и стили

3.1. Готовые стили оформления

Matplotlib умеет переключать «тему» одной строкой — для презентации или курсовой.


import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)

for style in ["default", "ggplot", "seaborn-v0_8-darkgrid", "fivethirtyeight"]:
    plt.style.use(style)
    plt.plot(x, np.sin(x))
    plt.title(f"Стиль: {style}")
    plt.show()

Разбор:

  • plt.style.use(style) — глобально меняет шрифты, фон, цвета линий до следующего style.use.
  • Цикл открывает четыре окна подряд — закройте каждое, чтобы увидеть следующее.
  • seaborn-v0_8-darkgrid — имя стиля в новых версиях Matplotlib; если ошибка «style not found», выполните print(plt.style.available).

3.2. Объектно-ориентированный API (рекомендуется для сложных графиков)

Явные fig и ax — стандарт для отчётов и нескольких осей на одном листе.

Разбор:

  • fig — всё окно; ax — одна пара осей. Сохранение: fig.savefig(..).
  • ax.set(xlabel=.., ylabel=.., title=..) — три подписи одним вызовом.
  • spines — «рамка» графика; отключение верхней и правой — приём из статистических журналов, меньше визуального шума.
  • grid(True, axis="y") — только горизонтальные линии сетки.

3.3. Scatter с цветом третьего признака

Каждая точка может нести третье число через цвет — например, расстояние от центра или температура.


import matplotlib.pyplot as plt
import numpy as np

rng = np.random.default_rng(7)
n = 200
x = rng.uniform(0, 10, n)
y = rng.uniform(0, 10, n)
c = np.sqrt(x ** 2 + y ** 2)

plt.scatter(x, y, c=c, cmap="viridis", s=40, alpha=0.85)
plt.colorbar(label="Расстояние от начала")
plt.title("Scatter с цветовой кодировкой")
plt.show()

Разбор:

  • c=c — массив длины n: цвет каждой точки берётся из c[i].
  • cmap="viridis" — палитра от тёмного к жёлтому; plasma, coolwarm — другие варианты.
  • s=40 — размер маркера в пунктах².
  • colorbar() — шкала справа: какому цвету какое значение c соответствует.

4. Статистические и аналитические графики

4.1. Ящик с усами (box plot)

Медиана, квартили и выбросы одним рисунком — сравнение трёх групп без гистограмм на каждую.

Разбор:

  • data — список из трёх массивов; каждый массив — одна «коробка».
  • boxplot рисует медиану (линия внутри), ящик Q1–Q3, «усы» и точки-выбросы.
  • tick_labels — подписи групп под осью X.

4.2. Столбцы с погрешностью (yerr)

Среднее ± ошибка измерения — частый формат лабораторной и научной статьи.


import matplotlib.pyplot as plt
import numpy as np

labels = ["A", "B", "C", "D"]
means = [23, 31, 28, 35]
errors = [2.1, 3.0, 2.5, 2.8]

x = np.arange(len(labels))
plt.bar(x, means, yerr=errors, capsize=5, color="slateblue", alpha=0.85)
plt.xticks(x, labels)
plt.ylabel("Среднее")
plt.title("Средние значения ± погрешность")
plt.show()

Разбор:

  • yerr=errors — вертикальные «усики» погрешности на каждом столбце.
  • capsize=5 — горизонтальные черточки на концах усиков (длина в пунктах).
  • xticks(x, labels) — вместо 0,1,2,3 подписи A, B, C, D.

4.3. Тепловая карта (imshow)

Матрица чисел → цвета: корреляции признаков, таблица по дням и часам.

Разбор:

  • imshow — каждая ячейка матрицы = цвет; строки идут сверху вниз (как в массиве NumPy).
  • vmin=0, vmax=1 — шкала цвета зафиксирована; без этого контраст может «плыть».
  • RdYlBu_r — красный–жёлтый–синий (обратный); _r — reverse палитры.
  • colorbar(im, ax=ax) — легенда цветов привязана к этой оси.

4.4. Стековая диаграмма (stackplot)

Как меняется состав целого во времени: доли каналов, типов трафика.

Разбор:

  • stackplot(x, y1, y2, y3) — слои друг на друге; суммарная высота в точке x = web + mobile + api.
  • legend(loc="upper left") — легенда в левом верхнем углу; loc можно "best", "lower right" и т.д.

5. Подписи, аннотации и шкалы

5.1. Подпись экстремума (максимум, минимум)

Стрелка и текст на графике — для пояснения на защите проекта или слайде.

Разбор:

  • np.argmax(y) — индекс максимального элемента в массиве y.
  • peak_x, peak_y = x[peak_idx], y[peak_idx] — координаты пика на графике.
  • scatter([peak_x], [peak_y]) — выделить точку красным; zorder=5 — рисовать поверх линии.
  • annotate(..) — текст xytext со стрелкой к точке xy; f"max = {peak_y:.2f}" — два знака после запятой.

5.2. Логарифмическая шкала

Когда числа разбросаны на несколько порядков (1, 10, 1000, 1000000) — обычная ось сжимает мелкие значения.


import matplotlib.pyplot as plt
import numpy as np

x = np.logspace(0, 4, 50)
y = x ** 1.5

plt.loglog(x, y, marker="o", markersize=4)
plt.xlabel("X (log)")
plt.ylabel("Y (log)")
plt.title("Степенная зависимость на log-log")
plt.grid(True, which="both", alpha=0.3)
plt.show()

Разбор:

  • np.logspace(0, 4, 50) — 50 точек от 10⁰=1 до 10⁴=10000 логарифмически равномерно.
  • loglog — логарифм по обеим осям; прямая на таком графике часто означает степенной закон y ∝ x^1.5.
  • which="both" у сетки — линии для основных и промежуточных делений.

5.3. Даты на оси X (временной ряд)

Продажи по дням, температура, курс валюты — ось X из объектов datetime.

Разбор:

  • timedelta(days=i) — i-й день от стартовой даты; список из 30 дат подряд.
  • np.cumsum(..) — накопительная сумма случайных шагов → «блуждающая» кривая вокруг 100.
  • autofmt_xdate() — наклоняет подписи дат, чтобы не налезали друг на друга.
  • Matplotlib сам понимает datetime на оси X — отдельный конвертер не нужен.

6. Специальные типы графиков

6.1. Полярная диаграмма

Угол θ и радиус r вместо x и y — розы ветров, диаграммы направлений.


import matplotlib.pyplot as plt
import numpy as np

theta = np.linspace(0, 2 * np.pi, 360)
r = 1 + 0.3 * np.sin(5 * theta)

fig, ax = plt.subplots(subplot_kw={"projection": "polar"})
ax.plot(theta, r, color="purple")
ax.set_title("Роза в полярных координатах")
plt.show()

Разбор:

  • projection="polar" — ось в виде круга; первый аргумент plot — угол в радианах, второй — радиус.
  • 5 * theta в sin — пять «лепестков» за оборот.

6.2. Контурный график (линии уровня)

Функция двух переменных z = f(x, y) — топографическая карта высот или потенциала.


import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-3, 3, 120)
y = np.linspace(-3, 3, 120)
X, Y = np.meshgrid(x, y)
Z = np.sin(X) * np.cos(Y)

fig, ax = plt.subplots()
contour = ax.contour(X, Y, Z, levels=12, cmap="coolwarm")
ax.clabel(contour, inline=True, fontsize=8)
ax.set_title("Линии уровня sin(x)·cos(y)")
plt.show()

Разбор:

  • meshgrid — двумерные сетки X и Y: в каждой точке (xi, yj) считаем Z.
  • contour(.., levels=12) — 12 линий уровня; точки на одной линии имеют одинаковое Z.
  • clabel — подписи значения Z на линиях.

6.3. 3D-поверхность

Объёмный график функции двух переменных; модуль mplot3d в составе Matplotlib.


import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-5, 5, 60)
y = np.linspace(-5, 5, 60)
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X ** 2 + Y ** 2))

fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111, projection="3d")
ax.plot_surface(X, Y, Z, cmap="viridis", edgecolor="none", alpha=0.9)
ax.set_title("3D-поверхность")
plt.show()

Разбор:

  • sqrt(X**2 + Y**2) — расстояние от центра; sin от него даёт «волну» от центра.
  • plot_surface — цветная поверхность; edgecolor="none" убирает сетку граней для гладкого вида.
  • Окно можно крутить мышью (если интерактивный backend).

7. Анимация

7.1. Движущаяся синусоида

Кадр за кадром меняем данные линии — основа GIF и простых симуляций.

Разбор:

  • (line,) = ax.plot(..) — запятая создаёт кортеж из одного объекта Line2D; нужно для blit.
  • update(frame) вызывается frames раз; frame — номер кадра 0, 1, 2, …
  • frame / 10 — фаза синуса сдвигается → волна «бежит».
  • interval=50 — 50 мс между кадрами (~20 FPS).
  • blit=True — перерисовывается только линия, быстрее на слабых ПК.

Сохранение: anim.save("wave.gif", writer="pillow") — нужен пакет pillow. Для MP4 — ffmpeg в системе.


8. Экспорт и публикация

8.1. Сохранение в PNG и PDF

График в файл — для Word, LaTeX, презентации, сдачи на платформу. Вставка PDF в .tex-отчёт — LaTeX — формулы для отчётов.


import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y = np.cos(x)

fig, ax = plt.subplots(figsize=(6, 4), dpi=120)
ax.plot(x, y, linewidth=2)
ax.set_title("График для отчёта")
fig.tight_layout()
fig.savefig("report_plot.png", bbox_inches="tight")
fig.savefig("report_plot.pdf")
plt.show()

Разбор:

  • figsize=(6, 4) — размер в дюймах; вместе с dpi=120 PNG получится примерно 720×480 пикселей.
  • savefig до или после show() — оба варианта работают; часто сохраняют перед показом.
  • bbox_inches="tight" — обрезка пустых полей по краям.
  • PDF — вектор: при печати не «мылится», как растровый PNG.

8.2. PNG с прозрачным фоном

Вставка графика на цветной слайд или сайт без белого прямоугольника.


import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 6, 100)
plt.plot(x, np.sin(x), color="navy", linewidth=3)
plt.axis("off")
plt.savefig("sin_transparent.png", transparent=True, bbox_inches="tight", pad_inches=0.1)
plt.show()

Разбор:

  • axis("off") — скрыть оси, рамку и подписи; остаётся только линия.
  • transparent=True — фон PNG прозрачный (альфа-канал).
  • pad_inches=0.1 — узкая рамка вокруг линии при обрезке.

9. Переиспользуемые базы

9.1. Шаблон для экспериментов

Один раз настроили размер и стиль — дальше только меняете данные.

Разбор:

  • Функция возвращает (fig, ax) — дальше рисуете через ax.plot, ax.set_xlabel и т.д.
  • Параметры со значениями по умолчанию — можно вызвать setup_figure() без аргументов.

9.2. Сброс состояния pyplot

В Jupyter старые фигуры «висят» в памяти — перед новым графиком полезно очистить.


import matplotlib.pyplot as plt

def reset_pyplot():
    plt.close("all")
    plt.clf()
    plt.cla()

Разбор:

  • close("all") — закрыть все окна Figure.
  • clf() — clear figure текущего окна; cla() — clear axes (очистить оси).

Частые задания из школы и вуза

Задание Что взять из этой страницы
Построить график y = sin x Линейный график
Построить параболу y = x² График параболы
Столбчатая диаграмма по таблице Столбчатая диаграмма
Гистограмма оценок класса Гистограмма
Два графика на одном рисунке Сетка 2×2 или несколько функций
Сохранить график в файл для отчёта PNG и PDF
Как сдавать работу

Сохраните PNG через fig.savefig("grafik.png", dpi=150, bbox_inches="tight"), вставьте в Word или Google Docs. Подписи осей и заголовок на графике должны совпадать с формулировкой в задании — преподаватель сверяет именно это.


См. также