Matplotlib — графики
Приветствую! Здесь вы наверняка найдете, что ищете. Примеры в лаборатории рассчитаны на то, что мы разбираем что-то конкретное.
Текущая статья посвящена примерам: графиков Matplotlib на Python.
Поэтому за теорией по текущей теме вам — в энциклопедию. Если ещё не погружались, то маршрут прост:
- Основы
- Система и сеть
- Данные и разметка
- Код и разработка
- Языки
- Искусственный интеллект
- Проект
- Инфраструктура и безопасность
- Спин-офф
Обязательно пройдитесь.
А теперь приступим к нашему предмету.
Основы графиков на Python
Matplotlib — главная библиотека Python для построения графиков: линии, столбцы, точки, гистограммы, круговые диаграммы. Её используют в школе (график функции, лабораторная по физике), в вузе (курсовые, статистика) и на работе (отчёты, анализ данных).
Теория — Matplotlib — графики (архитектура, pyplot, экспорт).
Массивы для осей X и Y — примеры NumPy.
Символьные формулы (корни, производные) перед графиком — SymPy — уравнения и производные.
Таблицы перед графиком — примеры Pandas, NumPy и pandas.
Рисование фигур «от руки» — примеры Turtle (Python) или p5.js (браузер).
Здесь — графики по числам: оси X и Y, подписи, легенда.
Как запустить пример
- Установите библиотеки (один раз в терминале или командной строке):
pip install matplotlib numpy
- Скопируйте код в файл, например
grafik.py. - Запустите:
python grafik.py— откроется окно с графиком. - В 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=120PNG получится примерно 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. Подписи осей и заголовок на графике должны совпадать с формулировкой в задании — преподаватель сверяет именно это.
См. также
- Matplotlib — графики — теория, API, экспорт
- Анализ данных и научные вычисления — NumPy, Pandas, Seaborn, Plotly
- Python для анализа данных — описательная статистика и визуализация
- LaTeX — формулы для отчётов — оформление формул в PDF
- SymPy — уравнения и производные — решение уравнений и производные в Python
- Примеры фигур Panda3D на Python — 3D-сцены
- Tkinter — окна и виджеты — формы и кнопки; график Matplotlib можно встроить в то же окно (Matplotlib — графики)