Загрузка данных
# ============================================================
# ЗАДАНИЕ 12. ПОСТРОЕНИЕ ГРАФИКОВ С ПОМОЩЬЮ MATPLOTLIB
# ============================================================
# Подключаем библиотеку NumPy для работы с массивами и числами
import numpy as np
# Подключаем библиотеку Matplotlib для построения графиков
import matplotlib.pyplot as plt
# ============================================================
# ПУНКТ 1. ПОСТРОИТЬ ГРАФИКИ sin(x) И cos(x)
# НА ОДНОМ ГРАФИКЕ
# ============================================================
print("ПУНКТ 1. Графики sin(x) и cos(x)")
# np.pi — число π (примерно 3.14159).
# -2 * np.pi — левая граница диапазона.
# 2 * np.pi — правая граница диапазона.
# np.linspace создаёт 200 равномерно распределённых точек.
# Эти точки будут координатами по горизонтальной оси X.
x = np.linspace(-2 * np.pi, 2 * np.pi, 200)
# Вычисляем синус для каждого значения x.
# NumPy применяет функцию sin сразу ко всем элементам массива.
y1 = np.sin(x)
# Вычисляем косинус для каждого значения x.
y2 = np.cos(x)
# Создаём область для графика размером 8 на 5 дюймов.
plt.figure(figsize=(8, 5))
# Строим график синуса.
# Первый аргумент — координаты X, второй — координаты Y.
# label задаёт название линии в легенде.
plt.plot(x, y1, label="sin(x)")
# Строим график косинуса на той же области.
plt.plot(x, y2, label="cos(x)")
# Подписываем горизонтальную ось.
plt.xlabel("x")
# Подписываем вертикальную ось.
plt.ylabel("y")
# Добавляем заголовок графика.
plt.title("Графики sin(x) и cos(x)")
# Показываем легенду с названиями линий.
plt.legend()
# Включаем координатную сетку.
plt.grid(True)
# Отображаем готовый график на экране.
plt.show()
# ============================================================
# ПУНКТ 2. СОХРАНИТЬ ГРАФИК В ФАЙЛ
# ============================================================
print("\nПУНКТ 2. Сохранение графика")
# Создаём новую область для отдельного графика.
plt.figure(figsize=(8, 5))
# Повторно строим синус и косинус.
plt.plot(x, y1, label="sin(x)")
plt.plot(x, y2, label="cos(x)")
# Добавляем подписи, заголовок, легенду и сетку.
plt.xlabel("x")
plt.ylabel("y")
plt.title("Графики sin(x) и cos(x)")
plt.legend()
plt.grid(True)
# Сохраняем график в PNG-файл.
# Имя файла — grafik.png.
# dpi=300 задаёт высокое разрешение изображения.
# bbox_inches="tight" уменьшает лишние поля вокруг графика.
# Сохраняем ДО вызова plt.show().
plt.savefig("grafik.png", dpi=300, bbox_inches="tight")
# Выводим сообщение о сохранении.
print("График сохранён в файл grafik.png")
# Показываем график.
plt.show()
# ============================================================
# ПУНКТ 3. СОЗДАТЬ ДВУМЕРНУЮ СЕТКУ РАЗМЕРОМ 50x50
# С ПОМОЩЬЮ np.meshgrid
# ============================================================
print("\nПУНКТ 3. Создание двумерной сетки")
# Создаём 50 значений по оси X в диапазоне от -5 до 5.
x = np.linspace(-5, 5, 50)
# Создаём 50 значений по оси Y в диапазоне от -5 до 5.
y = np.linspace(-5, 5, 50)
# np.meshgrid превращает два одномерных массива
# в две двумерные матрицы координат.
# Каждая пара X[i, j], Y[i, j] задаёт точку на плоскости.
X, Y = np.meshgrid(x, y)
# Свойство shape показывает размеры массива.
# Ожидаемый результат для обеих матриц — (50, 50).
print("Размер массива X:", X.shape)
print("Размер массива Y:", Y.shape)
# Показываем полученные матрицы координат.
print("\nМассив X:")
print(X)
print("\nМассив Y:")
print(Y)
# ============================================================
# ПУНКТ 4. ПОСТРОИТЬ ГРАФИКИ ФУНКЦИИ
# g(x, y) = 1/x^2 + 1/y^2
# ============================================================
print("\nПУНКТ 4. Графики функции двух переменных")
# Функция содержит деление на x^2 и y^2.
# При x = 0 или y = 0 делить на ноль нельзя.
# Поэтому создаём 50 точек от -5 до 5, а затем
# удаляем из массивов нулевые значения.
x = np.linspace(-5, 5, 50)
y = np.linspace(-5, 5, 50)
# Удаляем ноль из массива X-координат.
x = x[x != 0]
# Удаляем ноль из массива Y-координат.
y = y[y != 0]
# Создаём сетку из оставшихся координат.
# Поскольку ноль удалён, размер сетки будет 49x49.
X, Y = np.meshgrid(x, y)
# Вычисляем функцию в каждой точке сетки:
# Z = 1 / X^2 + 1 / Y^2.
# Оператор **2 означает возведение в квадрат.
# NumPy выполняет вычисления для всех элементов сразу.
Z = 1 / X**2 + 1 / Y**2
# ------------------------------------------------------------
# ПУНКТ 4.1. ТРЁХМЕРНАЯ ПОВЕРХНОСТЬ
# ------------------------------------------------------------
print("Построение трёхмерного графика")
# Создаём окно графика размером 8x6 дюймов.
fig = plt.figure(figsize=(8, 6))
# Создаём трёхмерную систему координат.
# projection="3d" включает третью ось Z.
ax = fig.add_subplot(111, projection="3d")
# Строим поверхность по координатам X, Y и значениям Z.
# cmap="viridis" задаёт цветовую палитру поверхности.
ax.plot_surface(X, Y, Z, cmap="viridis")
# Подписываем три оси координат.
ax.set_xlabel("X")
ax.set_ylabel("Y")
ax.set_zlabel("g(x, y)")
# Добавляем заголовок.
ax.set_title("Трёхмерный график функции")
# Сохраняем трёхмерный график в файл.
plt.savefig("surface.png", dpi=300, bbox_inches="tight")
# Отображаем график.
plt.show()
# ------------------------------------------------------------
# ПУНКТ 4.2. КОНТУРНЫЙ ГРАФИК
# ------------------------------------------------------------
print("Построение контурного графика")
# Создаём новую область для двумерного графика.
plt.figure(figsize=(7, 5))
# Строим линии уровня функции.
# levels=20 означает, что Matplotlib выберет 20 уровней.
contour = plt.contour(X, Y, Z, levels=20)
# Подписываем линии значениями функции.
# inline=True размещает подписи на линиях.
# fontsize=8 задаёт размер текста.
plt.clabel(contour, inline=True, fontsize=8)
# Добавляем подписи осей, заголовок и сетку.
plt.xlabel("X")
plt.ylabel("Y")
plt.title("Контурный график функции")
plt.grid(True)
# Сохраняем контурный график.
plt.savefig("contour.png", dpi=300, bbox_inches="tight")
# Показываем результат.
plt.show()
# ------------------------------------------------------------
# ПУНКТ 4.3. ЦВЕТОВАЯ КАРТА
# ------------------------------------------------------------
print("Построение цветовой карты")
# Создаём новую область для графика.
plt.figure(figsize=(7, 5))
# Отображаем значения Z в виде цветовой карты.
# extent задаёт границы изображения по осям X и Y.
# origin="lower" размещает начало изображения снизу.
# aspect="auto" позволяет подстроить изображение под область.
# cmap="viridis" задаёт цветовую палитру.
plt.imshow(
Z,
extent=[x.min(), x.max(), y.min(), y.max()],
origin="lower",
aspect="auto",
cmap="viridis"
)
# Добавляем цветовую шкалу.
# Она показывает, каким цветам соответствуют значения функции.
plt.colorbar(label="g(x, y)")
# Подписываем оси и добавляем заголовок.
plt.xlabel("X")
plt.ylabel("Y")
plt.title("Цветовая карта функции")
# Сохраняем цветовую карту в файл.
plt.savefig("heatmap.png", dpi=300, bbox_inches="tight")
# Показываем график.
plt.show()
# ============================================================
# ЗАВЕРШЕНИЕ ПРОГРАММЫ
# ============================================================
print("\nПрограмма завершена!")
print("Созданы файлы:")
print("1. grafik.png — графики sin(x) и cos(x)")
print("2. surface.png — трёхмерная поверхность")
print("3. contour.png — контурный график")
print("4. heatmap.png — цветовая карта")