Министерство цифрового развития, связи и массовых коммуникаций Российской Федерации
Ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования
МОСКОВСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
СВЯЗИ И ИНФОРМАТИКИ
(МТУСИ)
Факультет "Сети и системные связи"
Кафедра “ВвИТ"
ОТЧЕТ
по дисциплине " Построение 2D графиков в Python
"Лабораторная работа №6"
Выполнил
Студент гр. БИН2412 ____________________ Джумъаев Ф.Н.
Проверил
Преподаватель ___________________
Дата защиты _________2025г.
Москва 2025
Цель работы
Знакомство с численными методами для решения задач:
- построение 2D графиков
Задание 1.1 (основная часть) “Построение массива точек”
Задание 1.2 (основная часть) “Построение графика функции”
Введение
Блок 1 “Построение 2D графиков” Библиотека matplotlib — один из наиболее популярных инструментов для визуализации данных в Python. Она позволяет создавать различные типы двумерных графиков, начиная от простых точечных диаграмм и заканчивая сложными графиками функций и трехмерными изображениями. Рассмотрим простейший пример - построим график прямой линии. import numpy as np import matplotlib.pyplot as plt # Генерируем массив значений x x = np.linspace(-10, 10, 100) # Вычисляем значения y = x^2 y = x ** 2 # Создаем график plt.plot(x, y) # Добавляем заголовок и подписи к осям plt.title('График квадратичной функции') plt.xlabel('X ось') plt.ylabel('Y ось') # Отображаем график plt.show() Теперь рассмотрим случай, когда мы хотим построить набор (массив) отдельных точек в координатных осях. import numpy as np import matplotlib.pyplot as plt # Массив случайных значений X и Y np.random.seed(0) x = np.random.randn(50) y = np.random.randn(50) # Строим точки plt.scatter(x, y, color='blue', marker='o') # Заголовок и подписи к осям plt.title('Диаграмма рассеяния') plt.xlabel('Ось X') plt.ylabel('Ось Y') # Показываем график plt.show() Помимо стандартных сплошных линий ('-'), библиотека поддерживает другие стили отображения: Строка '-' '--' '-.' ':' 'None' Описание Сплошная линия Штриховая линия Штрих-пунктирная Точка-штрих Нет линии Пример изменения стиля линии: import numpy as np import matplotlib.pyplot as plt x = np.linspace(0, 10, 100) y = np.sin(x) plt.plot(x, y, linestyle='--') # Используем штриховую линию plt.title('Синусоидальная кривая') plt.xlabel('Время') plt.ylabel('Амплитуда') plt.show() Можно также настроить внешний вид маркеров (точек), используемых для обозначения точек на графике. Параметр '.' ',' 'o' '+' '*' 's' 'd' Пример настройки маркера: import numpy as np import matplotlib.pyplot as plt x = np.arange(10) y = np.exp(x / 10) Значение Точка Пиксел Круг Плюс Звезда Квадрат Ромб plt.plot(x, y, marker='*', markersize=8, markeredgecolor='black', linewidth=0) plt.title('Экспоненциальная зависимость') plt.xlabel('Индекс') plt.ylabel('Значение экспоненты') plt.show() Для того, чтобы сделать графики более читабельными, можно добавить сетку и изменить оформление осей. import numpy as np import matplotlib.pyplot as plt x = np.linspace(0, 10, 100) y = np.cos(x) plt.figure(figsize=(8, 6)) # Размер окна графика plt.plot(x, y, label='Косинус') plt.grid(True) # Включаем сетку plt.legend() # Подписываем легенду plt.title('График косинуса') plt.xlabel('Угол в радианах') plt.ylabel('Значение функции') plt.show()
Задания 1.1
import numpy as np import matplotlib.pyplot as plt # Ввод диапазонов координат x_min = float(input("Введите минимальное значение x: ")) x_max = float(input("Введите максимальное значение x: ")) y_min = float(input("Введите минимальное значение y: ")) y_max = float(input("Введите максимальное значение y: ")) # Генерация 10 случайных точек np.random.seed(42) # Для воспроизводимости результатов x_coords = np.random.uniform(x_min, x_max, 10) y_coords = np.random.uniform(y_min, y_max, 10) # Создание графика plt.figure(figsize=(8, 6)) plt.scatter(x_coords, y_coords, color='blue', marker='o', s=100, edgecolor='black') # Настройка отображения plt.xlim(x_min - 1, x_max + 1) # +1 для лучшей видимости границ plt.ylim(y_min - 1, y_max + 1) plt.grid(True, linestyle='--', alpha=0.7) plt.title('Случайные точки в заданном диапазоне', fontsize=14) plt.xlabel('Ось X', fontsize=12) plt.ylabel('Ось Y', fontsize=12) # Добавление подписей к точкам for i, (x, y) in enumerate(zip(x_coords, y_coords)): plt.text(x, y, f' {i+1}', fontsize=10, verticalalignment='center') plt.show()
1. Импорт библиотек
import numpy as np
import matplotlib.pyplot as plt
numpy (np) - для работы с массивами и генерации случайных чисел.
matplotlib.pyplot (plt) - для визуализации данных.
2. Ввод диапазонов координат
x_min = float(input("Введите минимальное значение x: "))
x_max = float(input("Введите максимальное значение x: "))
y_min = float(input("Введите минимальное значение y: "))
y_max = float(input("Введите максимальное значение y: "))
Пользователь задает границы прямоугольной области, в которой будут генерироваться точки.
float() преобразует введенные строки в числа с плавающей точкой.
3. Генерация случайных точек
np.random.seed(42)
x_coords = np.random.uniform(x_min, x_max, 10)
y_coords = np.random.uniform(y_min, y_max, 10)
np.random.seed(42) фиксирует генератор случайных чисел для воспроизводимости результатов.
np.random.uniform() генерирует:
10 значений X в диапазоне [x_min, x_max]
10 значений Y в диапазоне [y_min, y_max]
4. Создание графика
plt.figure(figsize=(8, 6))
plt.scatter(x_coords, y_coords, color='blue', marker='o', s=100, edgecolor='black')
plt.figure(figsize=(8, 6)) - создает график размером 8x6 дюймов.
plt.scatter() рисует точки с параметрами:
color='blue' - синий цвет заливки,
marker='o' - круглые маркеры,
s=100 - размер точек (в пунктах),
edgecolor='black' - черная обводка.
5. Настройка отображения
plt.xlim(x_min - 1, x_max + 1)
plt.ylim(y_min - 1, y_max + 1)
plt.grid(True, linestyle='--', alpha=0.7)
plt.title('Случайные точки в заданном диапазоне', fontsize=14)
plt.xlabel('Ось X', fontsize=12)
plt.ylabel('Ось Y', fontsize=12)
xlim()/ylim() - устанавливают границы осей с запасом ±1 для лучшей видимости.
grid() добавляет сетку:
linestyle='--' - штриховая линия,
alpha=0.7 - полупрозрачность.
title(), xlabel(), ylabel() - добавляют заголовок и подписи осей.
6. Подписи точек
for i, (x, y) in enumerate(zip(x_coords, y_coords)):
plt.text(x, y, f' {i+1}', fontsize=10, verticalalignment='center')
Цикл перебирает точки и добавляет рядом их порядковые номера (1-10).
enumerate(zip(...)) объединяет координаты X и Y с индексами.
verticalalignment='center' выравнивает текст по вертикали.
7. Отображение графика
plt.show()
Выводит окно с графиком.
Пример работы:
Ввод:
Введите минимальное значение x: -5
Введите максимальное значение x: 5
Введите минимальное значение y: -3
Введите максимальное значение y: 3
Задания 1.2
import numpy as np import matplotlib.pyplot as plt # Создаем массив значений x от -5 до 5 с шагом 0.1 x = np.linspace(-5, 5, 200) # Определяем две нелинейные функции def func1(x): return np.sin(x) * np.exp(-0.1*x) # Затухающая синусоида def func2(x): return 0.5*x**3 - 2*x**2 + x + 3 # Кубическая функция # Создаем график с двумя подграфиками plt.figure(figsize=(12, 6)) # Первый график - сплошная линия plt.plot(x, func1(x), label=r'$f_1(x) = \sin(x) \cdot e^{-0.1x}$', linestyle='-', # Сплошная линия linewidth=2, color='blue') # Второй график - штрих-пунктирная линия plt.plot(x, func2(x), label=r'$f_2(x) = 0.5x^3 - 2x^2 + x + 3$', linestyle='-.', # Штрих-пунктир linewidth=2, color='red') # Настройка оформления plt.title('Графики нелинейных функций', fontsize=14, pad=20) plt.xlabel('Ось X', fontsize=12) plt.ylabel('Ось Y', fontsize=12) plt.grid(True, linestyle=':', alpha=0.7) plt.axhline(0, color='black', linewidth=0.5) plt.axvline(0, color='black', linewidth=0.5) plt.legend(fontsize=12) # Установка пределов осей plt.xlim(-5, 5) plt.ylim(-5, 8) # Добавляем подписи к интересным точкам plt.annotate('Локальный максимум', xy=(1.5, func2(1.5)), xytext=(2, 6), arrowprops=dict(facecolor='black', shrink=0.05)) plt.annotate('Точка перегиба', xy=(0, func1(0)), xytext=(-4, 0.5), arrowprops=dict(facecolor='black', shrink=0.05)) plt.tight_layout() plt.show()
1. Импорт библиотек и подготовка данных
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-5, 5, 200)
numpy (np) - для математических операций и работы с массивами
matplotlib.pyplot (plt) - для визуализации
np.linspace() создает массив из 200 точек от -5 до 5 (ось X)
2. Определение нелинейных функций
def func1(x):
return np.sin(x) * np.exp(-0.1*x) # Затухающая синусоида
def func2(x):
return 0.5*x**3 - 2*x**2 + x + 3 # Кубическая функция
func1: комбинация синуса и экспоненты (осцилляции с затуханием)
func2: кубический полином (S-образная кривая)
3. Настройка графика
plt.figure(figsize=(12, 6))
Создается фигура размером 12x6 дюймов
4. Построение графиков
plt.plot(x, func1(x),
label=r'$f_1(x) = \sin(x) \cdot e^{-0.1x}$',
linestyle='-', # Сплошная линия
linewidth=2,
color='blue')
Первая функция: синяя сплошная линия толщиной 2
Используется LaTeX-нотация для красивого отображения формулы
plt.plot(x, func2(x),
label=r'$f_2(x) = 0.5x^3 - 2x^2 + x + 3$',
linestyle='-.', # Штрих-пунктир
linewidth=2,
color='red')
Вторая функция: красная штрих-пунктирная линия
5. Оформление графика
plt.title('Графики нелинейных функций', fontsize=14, pad=20)
plt.xlabel('Ось X', fontsize=12)
plt.ylabel('Ось Y', fontsize=12)
Добавлены заголовок и подписи осей
plt.grid(True, linestyle=':', alpha=0.7)
plt.axhline(0, color='black', linewidth=0.5)
plt.axvline(0, color='black', linewidth=0.5)
Сетка с пунктирными линиями
Черные оси X и Y через (0,0)
plt.legend(fontsize=12)
Легенда с формулами функций
6. Настройка осей и аннотаций
plt.xlim(-5, 5)
plt.ylim(-5, 8)
Фиксированные пределы осей
plt.annotate('Локальный максимум', xy=(1.5, func2(1.5)),
xytext=(2, 6),
arrowprops=dict(facecolor='black', shrink=0.05))
Аннотация для локального максимума кубической функции
plt.annotate('Точка перегиба', xy=(0, func1(0)),
xytext=(-4, 0.5),
arrowprops=dict(facecolor='black', shrink=0.05))
Аннотация для точки перегиба затухающей синусоиды
7. Финализация
plt.tight_layout()
plt.show()
Автоматическая подгонка элементов
Отображение графика
Ключевые особенности:
Использование разных стилей линий для наглядности
Подробные аннотации для ключевых точек
Профессиональное оформление с LaTeX-формулами
Четкая сетка и оси координат
Оптимальный диапазон значений для визуализации
Этот код создает публикационно-качественный график, демонстрирующий поведение двух разных нелинейных функций в одной системе координат.
Заключение
1. Построение массива точек (Задание 1.1)
Что было сделано:
Написал программу, которая генерирует 10 случайных точек в заданных диапазонах по осям X и Y.
Реализовал интерактивный ввод границ (x_min, x_max, y_min, y_max).
Визуализировал точки с помощью plt.scatter(), добавил подписи и номера.
Что я узнал:
Как работать с генерацией случайных чисел (np.random.uniform).
Как настраивать внешний вид точечного графика (цвет, размер, обводка).
Как добавлять аннотации к точкам.
2. Построение графиков функций (Задание 1.2)
Что было сделано:
Выбрал две нелинейные функции:
Затухающая синусоида (sin(x) * exp(-0.1x)).
Кубический полином (0.5x³ - 2x² + x + 3).
Построил их графики с разными стилями линий (сплошная и штрих-пунктирная).
Добавил легенду с формулами, сетку, оси координат и аннотации для ключевых точек.
Что я узнал:
Как визуализировать сложные математические функции.
Как настраивать стили линий (linestyle), цвета и толщину.
Как подписывать графики с помощью LaTeX-формул.
Общие выводы
Библиотеки:
matplotlib — мощный инструмент для создания профессиональных графиков.
numpy упрощает работу с математическими функциями.
Применение:
Для анализа данных удобны точечные графики (scatter).
Для изучения поведения функций — линейные графики (plot).
Совершенствование:
Научился делать графики более читаемыми (сетка, подписи, аннотации).
Понял важность выбора правильного стиля визуализации.
Итог
Эта работа научила меня: Создавать базовые и сложные 2D-графики. Настраивать их оформление для лучшего восприятия. Анализировать данные через визуализацию.
