Как построить график в python
Перейти к содержимому

Как построить график в python

  • автор:

Графики функций и поверхностей в Python Питон Matplotlib

Построение графиков с помощью модуля Matplotlib в Python Питон.

В этом уроке мы разберём, как строить графики функций с помощью модуля Matplotlib в Python Питон.
Matplotlib это библиотека для Python, предназначенная для визуализации данных. В данном уроке мы разберём построение графиков функций в Питон на плоскости и построение поверхности в трёхмерном пространстве. Зачастую, именно Matplotlib используется в научных исследованиях и конференциях для демонстрации полученных данных.
Для построения графиков нужно импортировать модуль Pyplot. Pyplot это модуль для работы с графиками в Питоне. Pyplot это набор команд, созданных для построения графиков функций и уравнений. Для удобного построения графиков так же нужно использовать библиотеку NumPy.
Matplotlib, как и NumPy, встроен в среду разработки Spyder, поэтому их можно импортировать без предварительной установки.
import numpy as np
import matplotlib.pyplot as plt
as np и as plt означает, что когда мы будем вызывать функции и процедуры из модулей, вместо названия модулей мы будем использовать np и plt .
Для построения графика функции в Python нужно задать саму функцию. Её можно задать с помощью лямбда-функции. Лямбда-функция — это краткий способ записи обычной функции в одну строчку. В этом уроке мы рассмотрим построение синусоиды на Питоне. Синусоида задаётся функцией f(x) = sin(x) .
y = lambda x: np.sin(x)
y это обозначение функции (для её вызова мы будем использовать y(x) ), lambda это ключевое слово, обозначающее начало задания лямбда-функции, x это аргумент, использующийся в функции, после двоеточия задаётся функция. Так как в стандартном Python нет функции, возвращающей синус x , мы его задаём с помощью NumPy, его мы импортировали под именем np .
Все действия в Pyplot производятся на рисунках. Для построения графика функции в Python нужно сначала задать сетку координат. Сетка координат в python задается с помощью команды plt.subplots().
fig = plt.subplots()
Мы должны определить область значений, на которой мы будем строить график функции в Питоне. Это делается с помощью linspace .
x = np.linspace(-3, 3, 100)
linspace создаёт массив с нижней границей -3 и верхней границей 3 , в созданном массиве будет 100 элементов. Чем больше будет последнее число, тем больше значений функции будет рассчитываться, тем точнее будет отображаться график в Python.
После того, как мы создали систему координат, область построения, мы можем построить график в Питон. Для построения графика фуекции в Python нужно использовать команду plt.plot(x, y(x)) , где x это аргумент, y(x) это функция от x , заданная с помощью лямбда-выражения.
plt.plot(x, y(x))
После того, как мы построили график в Python, нужно показать его на рисунке. Для этого используется plt.show() .
Полный код программы на python для рисования графика функции
# импортируем модули
import numpy as np
import matplotlib.pyplot as plt
# функция
y = lambda x: np.sin(x)
# создаём рисунок с координатную плоскость
fig = plt.subplots()
# создаём область, в которой будет
# — отображаться график
x = np.linspace( -3, 3, 100)
# значения x, которые будут отображены
# количество элементов в созданном массиве
# — качество прорисовки графика
# рисуем график
plt.plot(x, y(x))
# показываем график
plt.show()

Получим график синусоиды в python в отдельном окне

график функции на Python

Отображение нескольких графиков на одном рисунке в Python

В одной области в python можно отобразить графики нескольких функций. Добавим aeyrwb. y=x и нарисуем ее совместно с синусоидой.
Для этого введем еще одну функцию с помощью lambda
y1=lambda x: x
Построим график этой функции
plt.plot(x,y1(x))
В итоге программа в Python для построения графиков двух функций в одном окне

# импортируем модули
import numpy as np
import matplotlib.pyplot as plt
# функция
y = lambda x: np.sin(x)
y1=lambda x: x
# создаём рисунок с координатную плоскость
fig = plt.subplots()
# создаём область, в которой будет
# — отображаться график
x = np.linspace(-3, 3,100)
# значения x, которые будут отображены
# количество элементов в созданном массиве
# — качество прорисовки графика
# рисуем график
plt.plot(x, y(x))
plt.plot(x,y1(x))
# показываем график
plt.show()

построение графика двух функций в python

Трехмерные поверхности в Python

В трёхмерном пространстве каждая точка задаётся тремя координатами, следовательно, в трёхмерном пространстве нужно два аргумента для задания функции. В этом уроке по Питону мы зададим функцию
f(x,y)=x^2-y^2
от двух аргументов. Аргументы x и y , функция z .
f = lambda x, y: x ** 2 — y ** 2
Чтобы начать рисовать трехмерные поверхности в Python нужно сначал задать область построения с помощью функции plt.figure принимает параметр figsize(x, y) , где x и y – ширина и высота рисунка в дюймах. Создадим рисунок в Python размером 12×6 дюймов для отображения графиков
fig = plt.figure(figsize = (12, 6))
В построенной области мы создадим рисунок, в котором будут отображено трёхмерное пространство с координатными осями и сама поверхность. В Питоне для этого используется fig.add_subplot() .
ax = fig.add_subplot(1, 1, 1, projection = ‘3d’)
Функция в Python fig.add_subplot() разбивает область построения на клетки и задает в какой клетке рисовать трехмерный график. Так команда ax = fig.add_subplot(1, 1, 1, projection = ‘3d’) разбивает область построения на две клтки и в первую клетку будет отображаться трехмерный гарфик, благодаря аргументу projection = ‘3d’
Введём области отображения функции для каждого аргумента в Питон.
xval = np.linspace(-5, 5, 100)
yval = np.linspace(-5, 5, 100)
Нужно создать поверхность, которая будет отображаться на рисунке в Python. Для этого используется
surf = ax.plot_surface(x, y, z, rstride = 4, cstride = 4, cmap = cm.plasma)
Где x и y это принимаемые аргументы, z это получаемая функция, rstride и cstride отвечает за шаг прорисовки поверхности в Питон, чем меньше будут эти значения, тем более плавно будет выглядеть градиент на поверхности. С помощью cmap.plasma поверхность будет отображаться с цветовой схемой plasma . Например, существуют цветовые схемы, такие как viridis и magma . Полный список цветовых схем есть на сайте Matplotlib.
Пример программы на Python построение поверхности в трёхмерном пространстве # импортируем модули
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
from matplotlib import cm
import matplotlib.pyplot as plt
# уравнение поверхности
f = lambda x, y: x ** 2 — y ** 2
# создаём полотно для рисунка
fig = plt.figure(figsize = (10, 10))
# создаём рисунок пространства с поверхностью
ax = fig.add_subplot(1, 1, 1, projection = ‘3d’)
# размечаем границы осей для аргументов
xval = np.linspace(-4, 4, 100)
yval = np.linspace(-4, 4, 100)
# создаём массив с xval столбцами и yval строками
# — в этом массиве будут храниться значения z
x, y = np.meshgrid(xval, yval)
# приравниваем z к функции от x и y
z = f(x, y)
# создаём поверхность
surf = ax.plot_surface(
# отмечаем аргументы и уравнение поверхности
x, y, z,
# шаг прорисовки сетки
# — чем меньше значение, тем плавнее
# — будет градиент на поверхности
rstride = 10,
cstride = 10,
# цветовая схема plasma
cmap = cm.plasma)

Получим график трехмерной поверхности в цветовой гамме в специальном окне

график трехмерной поверхности в python

Изменим параметры построения трехмерной поверхности, уменьшим размер сетик, сделаем поверхность более плавной и точной для этого уменьшаем параметры и сменим цветовую гамму на viridis

rstride = 2,
cstride = 2,
cmap = cm.viridis)

Получим график трехмерной поверхности в Python более точный и в другой цветовой гамме

трехмерная поверхность в Python

Вернуться к содержанию курса python Следующая тема Классы в Питон

Построить график функции в Python

При­ве­дем тут для на­ча­ла про­стей­ший при­мер по­стро­е­ний гра­фи­ка сред­ства­ми па­ке­та matplotlib. Для при­ме­ра по­стро­им гра­фик си­ну­со­и­ды.

import numpy as np import matplotlib.pyplot as plt x = np.arange(0, 15, 0.1); y = np.sin(x) plt.plot(x, y) plt.show()

Вы мо­же­те са­мо­сто­я­тель­но тут экс­пе­ри­мен­ти­ро­вать с ко­дом. На­при­мер, за­ме­ни­те функ­цию sin(x) на cos(x) или из­ме­ни­те диа­па­зон, для ко­то­ро­го стро­ит­ся гра­фик: arange(0, 5, 0.1).

Matplotlib. Урок 4.1. Визуализация данных. Линейный график

Follow us on Google Plus Follow us on rss

Линейный график – это один из наиболее часто используемых видов графика для визуализации данных. Он использовался нами для демонстрации возможностей Matplotlib в предыдущих уроках, в этом уроке мы более подробно рассмотрим возможности настройки его внешнего вида.

  • Построение графика
    • Параметры аргумента fmt

    Построение графика

    Для построения линейного графика используется функция plot() , со следующей сигнатурой:

    plot([x], y, [fmt], *, data=None, **kwargs)

    plot([x], y, [fmt], [x2], y2, [fmt2], …, **kwargs)

    Если вызвать функцию plot() с одним аргументом – вот так: plot(y) , то мы получим график, у которого по оси ординат (ось y ) будут отложены значения из переданного списка, по по оси абсцисс (ось x ) – индексы элементов массива.

    Рассмотрим аргументы функции plot() :

    Параметры аргумента fmt

    Определяет тип маркера, может принимать одно из значений, представленных в таблице ниже

    Символ Описание
    ‘.’ Точка ( point marker )
    ‘,’ Пиксель ( pixel marker )
    ‘o’ Окружность ( circle marker )
    ‘v’ Треугольник, направленный вниз ( triangle_down marker )
    ‘^’ Треугольник, направленный вверх( triangle_up marker )

    Треугольник, направленный влево ( triangle_left marker )
    ‘>’ Треугольник, направленный вправо ( triangle_right marker )
    ‘1’ Треугольник, направленный вниз ( tri_down marker )
    ‘2’ Треугольник, направленный вверх( tri_up marker )
    ‘3’ Треугольник, направленный влево ( tri_left marker )
    ‘4’ Треугольник, направленный вправо ( tri_right marker )
    ‘s’ Квадрат ( square marker )
    ‘p’ Пятиугольник ( pentagon marker )
    ‘*’ Звезда ( star marker )
    ‘h’ Шестиугольник ( hexagon1 marker )
    ‘H’ Шестиугольник ( hexagon2 marker )
    ‘+’ Плюс ( plus marker )
    ‘x’ Х-образный маркер ( x marker )
    ‘D’ Ромб ( diamond marker )
    ‘d’ Ромб ( thin_diamond marker )
    ‘|’ Вертикальная линия ( vline marker )
    ‘_’ Горизонтальная линия ( hline marker )

    Стиль линии/ Может принимать одно из следующих значений:

    Символ Описание
    ‘-‘ Сплошная линия ( solid line style )
    ‘–‘ Штриховая линия ( dashed line style )
    ‘-.’ Штрих-пунктирная линия ( dash-dot line style )
    ‘:’ Штриховая линия ( dotted line style )

    Цвет графика. В рамках аргумента fmt цвет задается значением из следующей таблицы:

    Символ Описание
    ‘b’ Синий
    ‘g’ Зеленый
    ‘r’ Красный
    ‘c’ Бирюзовый
    ‘m’ Фиолетовый (пурпурный)
    ‘y’ Желтый
    ‘k’ Черный
    ‘w’ Белый

    Реализуем возможности plot() на примере:

    x = [1, 5, 10, 15, 20] y1 = [1, 7, 3, 5, 11] y2 = [4, 3, 1, 8, 12] plt.figure(figsize=(12, 7)) plt.plot(x, y1, 'o-r', alpha=0.7, label="first", lw=5, mec='b', mew=2, ms=10) plt.plot(x, y2, 'v-.g', label="second", mec='r', lw=2, mew=2, ms=12) plt.legend() plt.grid(True)

    Рассмотрим различные варианты использования линейного графика.

    Заливка области между графиком и осью

    Для заливки областей используется функция fill_between() . Сигнатура функции:

    fill_between(x, y1, y2=0, where=None, interpolate=False, step=None, *, data=None, **kwargs)

    Основные параметры функции:

    • x : массив длины N
      • Набор данных для оси абсцисс.
      • Набор данных для оси ординат – первая кривая.
      • Набор данных для оси ординат – вторая кривая.
      • Задает заливаемый цветом регион, который определяется координатами x[where] : интервал будет залит между x[i] и x[i+1] , если where[i] и where[i+1] равны True .
      • Определяет шаг, если используется step -функция для отображения графика (будет рассмотрена в одном из следующих уроков).
      • Свойства класса Polygon

      Создадим набор данных для эксперимента:

      import numpy as np x = np.arange(0.0, 5, 0.01) y = np.cos(x*np.pi)

      Отобразим график с заливкой:

      plt.plot(x, y, c = "r") plt.fill_between(x, y)

      Изменим правила заливки:

      plt.plot(x, y, c = "r") plt.fill_between(x, y, where = (y > 0.75) | (y < -0.75))

      Используя параметры y1 и y2 можно формировать более сложные решения.

      Заливка области между 0 и y , при условии, что y >= 0:

      plt.plot(x, y, c = "r") plt.fill_between(x, y, where = (y > 0))

      Заливка области между 0.5 и y , при условии, что y >= 0.5:

      plt.plot(x, y, c = "r") plt.grid() plt.fill_between(x, 0.5, y, where=y>=0.5)

      Заливка область между y и 1:

      plt.plot(x, y, c = "r") plt.grid() plt.fill_between(x, y, 1)

      Вариант двухцветной заливки:

      plt.plot(x, y, c = "r") plt.grid() plt.fill_between(x, y, where=y>=0, color="g", alpha=0.3) plt.fill_between(x, y, where=y
      

      Настройка маркировки графиков

      В начале этого раздела мы приводили пример использования маркеров при отображении графиков. Сделаем это ещё раз, но уже в упрощенном виде:

      x = [1, 2, 3, 4, 5, 6, 7] y = [7, 6, 5, 4, 5, 6, 7] plt.plot(x, y, marker="o", c="g")

      В наборе данных, который создает код:

      import numpy as np x = np.arange(0.0, 5, 0.01) y = np.cos(x*np.pi)

      количество точек составляет 500, поэтому подход, представленный выше уже будет не применим:

      plt.plot(x, y, marker="o", c="g")

      В этой случае нужно задать интервал отображения маркеров, для этого используется параметр markevery , который может принимать одно из следующих значений:

      None – отображаться будет каждая точка;

      N – отображаться будет каждая N -я точка;

      (start, N) – отображается каждая N -я точка начиная с точки start ;

      slice(start, end, N) – отображается каждая N -я точка в интервале от start до end ;

      [i, j, m, n] – будут отображены только точки i, j, m, n .

      Ниже представлен пример, демонстрирующий работу с markevery :

      x = np.arange(0.0, 5, 0.01) y = np.cos(x*np.pi) m_ev_case = [None, 10, (100, 30), slice(100,400,15), [0, 100, 200, 300], [10, 50, 100]] fig, ax = plt.subplots(2, 3, figsize=(10, 7)) axs = [ax[i, j] for i in range(2) for j in range(3)] for i, case in enumerate(m_ev_case): axs[i].set_title(str(case)) axs[i].plot(x, y, "o", ls='-', ms=7, markevery=case)

      Обрезка графика

      Для того, чтобы отобразить только часть графика, которая отвечает определенному условию используйте предварительное маскирование данных с помощью функции masked_where из пакета numpy .

      x = np.arange(0.0, 5, 0.01) y = np.cos(x*np.pi) y_masked = np.ma.masked_where(y < -0.5, y) plt.ylim(-1, 1) plt.plot(x, y_masked, linewidth=3)

      P.S.

      Вводные уроки по “Линейной алгебре на Python” вы можете найти соответствующей странице нашего сайта . Все уроки по этой теме собраны в книге “Линейная алгебра на Python”.

      Если вам интересна тема анализа данных, то мы рекомендуем ознакомиться с библиотекой Pandas. Для начала вы можете познакомиться с вводными уроками. Все уроки по библиотеке Pandas собраны в книге “Pandas. Работа с данными”.

      Строим математический график на Python

      Сегодня мы поговорим про то, как построить математический график при помощи языка Python за 10 минут. Мы рассмотрим построение параметрических кривых в трехмерном и двумерном пространстве с использованием различных примеров.

      У многих из нас со школьной скамьи остались не самые приятные воспоминания о математике. Кто-то воспринимал её как необходимое зло: сложное и скучное, но обязательное. Кто-то же отказывался понимать математику от слова совсем.

      Так или иначе, но наше школьное образование было ориентировано скорее на запоминание и заучивание, а не на размышления. По большому счету не было никакой мотивации разбираться в основах математики или в том, как она на самом деле работает. Идея заключалась в том, чтобы просто узнать, какие задачи решает определенная формула, запомнить правильный набор шагов и воспроизвести все это на экзамене.

      Однако математика намного обширнее и интереснее того, что мы учили в школе. Если взять, например, кинематику, можно увидеть настоящую магию математики. Кинематика известна как «геометрия движения» – это изучение взаимодействия между движущимися телами во времени. Хотя бы раз увидите такое визуальное представление математических функций — и они оживут для вас. Возможно, в тот момент вы почувствуете, что впервые понимаете их правильно.

      Итак, давайте научимся самостоятельно моделировать данные и начнем писать собственные скрипты. Сегодня мы поговорим о параметрических кривых и как их строить, используя Python и такие библиотеки, как NumPy, SymPy и Matplotlib.

      Построение параметрических кривых

      Параметрические кривые поистине завораживают! Если говорить простым языком, параметрическую кривую можно понимать как след, оставляемый движением частицы в пространстве. Говоря более формально, этот след моделируется функцией, определяемой от интервала I до различных точек в пространстве E .

      Для трехмерного случая, если x , y и z заданы как функции переменной t в I (это параметр), мы получаем уравнения x = f(t) , y = g(t) и z = h(t) . Оценивая каждое значение параметра t в каждом из этих уравнений, мы получаем точку p(t) = (x(t),y(t),z(t)) в пространстве. Проделав эту процедуру для значений t , меняющихся в интервале I , мы получим параметрическую кривую.

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

      import sympy as sp import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D t = sp.Symbol('t') function_x = sp.sympify('sin(t)') function_y = sp.sympify('cos(t)') function_z = sp.sympify('t**2') interval = np.arange(0, 100, 0.1) x_values = [function_x.subs(t, value) for value in interval] y_values = [function_y.subs(t, value) for value in interval] z_values = [function_z.subs(t, value) for value in interval] fig = plt.figure(figsize=(10, 10)) ax = plt.axes(projection='3d') ax.plot(x_values, y_values, z_values) plt.show()

      Приведенный выше скрипт позволяет нам генерировать графики для параметрических кривых. К примеру, вот так выглядит график параметрической спирали p(t) = (sin(t),cos(t),sqrt(t3)) , для интервала от 0 до 100.

      Как работает скрипт

      Скрипт, который мы привели выше, использует такие библиотеки, как SymPy, NumPy и Matplotlib. Давайте разберемся со всем по порядку.

      SymPy — это библиотека Python для символьной математики. Она стремится стать полнофункциональной системой компьютерной алгебры (CAS). При этом сохраняется максимально простой код (а значит, понятный и масштабируемый). Библиотека SymPy, кстати, полностью написана на Python.

      NumPy — это основной пакет для научных вычислений в Python. Эта библиотека предоставляет:

      • объекты многомерного массива,
      • различные производные объекты (такие как маскированные массивы и матрицы)
      • набор подпрограмм для быстрых операций с массивами, включая математические и логические, манипуляции с фигурами, сортировку, выборку, ввод-вывод, дискретные преобразования Фурье, основные операции линейной алгебры, основные статистические операции и случайное моделирование.

      И последняя библиотека из нашего списка — Matplotlib. Это обширная библиотека для создания статических, анимированных и интерактивных визуализаций на Python.

      Подготовка

      Чтобы использовать перечисленные выше библиотеки в нашем скрипте, мы должны сначала установить их на свой компьютер, выполнив следующую инструкцию в терминале:

      pip install numpy sympy matplotlib

      Теперь, когда библиотеки установлены, мы можем импортировать их в нашу программу:

      import sympy as sp import numpy as np import matplotlib.pyplot as plt

      Построение графика трехмерной параметрической кривой

      Символьные вычисления в SymPy выполняются с помощью символов. Переменные SymPy являются объектами класса Symbols . Выражение t = sp.Symbol('t') присваивает символ t переменной t , с которой мы теперь можем работать как с математической переменной.

      Выглядит это следующим образом:

      t = sp.Symbol('t') print(t ** 2) >>> t ^ 2

      В рамках этой задачи нам нужно работать с составными выражениями, хранящимися в строке. Поэтому нам нужно сделать преобразование строки в математическое выражение понятным для SymPy. Для этого мы используем функцию sympify.sp.sympify(expression) , которая преобразует параметрическое выражение в общее математическое выражение.

      К примеру, наш код будет выглядеть так:

      function_z = sp.sympify('t^2') print(function_z + 2) >>> t ^ 2 + 2

      Теперь переменная function_z содержит математическое выражение t 2 +2 .

      Следующим шагом является возможность оценить параметр t внутри математического выражения. Функция subs() в SymPy позволит нам оценить выражение с заданным значением. Мы можем использовать его следующим образом: expression.subs(t, value) .

      Наш код будет выглядеть следующим образом:

      value = function_z.subs(t, 5) print(value) >>> 5 ^ 2 = 25

      Поскольку мы говорим о параметрических функциях, нас интересует оценка функции на последовательности вещественных значений в пределах интервала. Для этого мы используем функцию arange() в NumPy.

      Функция np.arange(start, stop, step) создает массив NumPy со значениями в интервале (start,stop) с приращением шага, то есть мы идем от start до stop-1 с определенным шагом step .

      Наш код будет выглядеть так:

      interval = np.arange(0, 10, 1) print(interval) >>> array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

      После создания массива интервалов нам нужно перебрать значения t и оценить каждое значение внутри функции. Для этого мы будем использовать генератор списков в Python и функцию subs() библиотеки SimPy.

      О генераторах списков можно почитать в статье «Генераторы списков в Python для начинающих».

      Функция subs() получает символ t (который мы сохранили в переменной t ) и значение каждого из элемента в качестве параметров.

      Выглядит это примерно следующим образом:

      z_values = [function_z.subs(t, value) for value in interval] print(z_values) >>> [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

      Мы повторяем эту процедуру для значений x_values ​​и y_values ​​и таким образом получаем массивы со значениями для построения.

      Наконец, с помощью библиотеки Matplotlib мы создаем график, соответствующий нашей параметрической кривой. В трехмерном случае, чтобы указать Matplotlib, что мы хотим сделать трехмерный график, мы используем следующий оператор:

      Кроме того, мы можем заменить функции и интервал на новые и получить самые разные кривые. Давайте попробуем еще раз, но с другими значениями.

      Например, напишем следующий код:

      function_x = sp.sympify('2*t + 10') function_y = sp.sympify('t**2') function_z = sp.sympify('sin(t**2) + cos(t**2)') interval = np.arange(-5, 5, 0.05)

      Запустим наш код и получим такой график:

      Немного поэкспериментируем

      Давайте немного поэкспериментируем с нашим кодом: попробуем различные значения и посмотрим, что получится. С помощью параметрических кривых можно создать множество фигур. Некоторые комбинации могут генерировать кривые с уникальной симметрией и красотой.

      Если вы хотите поиграть со скриптом самостоятельно, можете открыть эту ссылку и заменить значения для function_x , function_y , function_z и interval .

      К примеру, можно взять следующий код:

      import sympy as sp import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D symbol_x = sp.Symbol('t') function_x = sp.sympify('sin(t)') function_y = sp.sympify('t^2+2*t') function_z = sp.sympify('t^2') interval = np.arange(-10, 10, 0.1) x_values = [function_x.subs(symbol_x, value) for value in interval] y_values = [function_y.subs(symbol_x, value) for value in interval] z_values = [function_z.subs(symbol_x, value) for value in interval] fig = plt.figure(figsize=(10, 10)) ax = plt.axes(projection='3d') ax.plot(x_values, y_values, z_values) plt.show()

      Запустив его, мы получим такой результат:

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

      Построение 2D параметрических кривых

      С некоторыми модификациями данный скрипт также можно использовать и для построения двумерных параметрических кривых.

      Например, давайте построим двумерный график, полученный путем оценки выражения x = t − 1,6 ∗ cos(24 ∗ t) и y = t − 1,6 ∗ sin(25 ∗ t) на интервале I=[1.5,20.5] .

      Выглядеть это будет примерно следующим образом:

      Для того, чтобы смоделировать параметрическую кривую, показанную выше, можно воспользоваться следующим скриптом:

      import sympy as sp import numpy as np import matplotlib.pyplot as plt t = sp.Symbol('t') function_x = sp.sympify('t - 1.6*cos(24*t)') function_y = sp.sympify('t - 1.6*sin(25*t)') interval = np.arange(1.5, 20.5, 0.01) x_values = [function_x.subs(t, value) for value in interval] y_values = [function_y.subs(t, value) for value in interval] plt.figure(figsize=(10, 10)) plt.plot(x_values, y_values) plt.show()

      Давайте проверим наш код с другими функциями и новым интервалом. К примеру, возьмем следующие значения:

      function_x = sp.sympify('4*sin(5*t)') function_y = sp.sympify('5*cos(3*t)') interval = np.arange(0, 6.5, 0.001)

      Запустим наш скрипт и получим следующий график:

      Теперь давайте проделаем это ещё раз, но уже с новыми значениями:

      function_x = sp.sympify('cos(16*t) + (cos(6*t) / 2) + (sin(10*t) / 3)') function_y = sp.sympify('sin(16*t) + (sin(6*t) / 2) + (cos(10*t) / 3)') interval = np.arange(0, 3.16, 0.01)

      Тогда результат будет таким:

      Удивительно! Не правда ли?

      Построение математических функций

      Как только мы закончили написание скрипта для моделирования параметрических кривых, приходит осознание, что с помощью всего нескольких строк кода мы можем создать плоттер для математических функций как в двух, так и в трех измерениях! Невероятно! Это же так удобно!

      К примеру, давайте рассмотрим скрипт для построения графиков математических функций в двух и трех измерениях в интервале от a до b . То есть, консоль запросит у пользователя как функцию, так и значения a и b для интервала. Вот такой код у нас получится:

      import sympy as sp import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D symbol_x = sp.Symbol('x') symbol_y = sp.Symbol('y') def get_vector(a, b): return np.arange(a, b + 1, 0.1) def plot_2d_function(function, a, b): # Create the sympy function f(x) f_x = sp.sympify(function) # Create domain and image domain_x = get_vector(a, b) image = [f_x.subs(symbol_x, value) for value in domain_x] # Plot the 2D function graph fig = plt.figure(figsize=(10, 10)) plt.plot(domain_x, image) plt.show() def plot_3d_function(function, a, b): # Create sympy function f(x, y) f_xy = sp.lambdify((symbol_x, symbol_y), sp.sympify(function)) # Create domains and image domain_x = get_vector(a, b) domain_y = get_vector(a, b) domain_x, domain_y = np.meshgrid(domain_x, domain_y) image = f_xy(domain_x, domain_y) # Plot the 3D function graph fig = plt.figure(figsize=(10, 10)) ax = plt.axes(projection='3d') ax.plot_surface(domain_x, domain_y, image, rstride=1, cstride=1, cmap='viridis') plt.show() function = input('>> Enter the function: ') a_value = float(input('>> Enter the [a, ] value: ')) b_value = float(input('>> Enter the [, b] value: ')) if "x" and not "y" in function: plot_2d_function(function, a_value, b_value) elif "x" and "y" in function: plot_3d_function(function, a_value, b_value) else: print("You must enter a function in terms of x and/or y")

      Вы можете протестировать приведенный выше скрипт здесь. Запустите скрипт и введите свою конфигурацию функции и интервала.

      Например, возьмем следующий код:

      import sympy as sp import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D symbol_x = sp.Symbol('x') symbol_y = sp.Symbol('y') def get_vector(a, b): return np.arange(a, b + 1, 0.1) def plot_2d_function(function, a, b): # Create the sympy function f(x) f_x = sp.sympify(function) # Create domain and image domain_x = get_vector(a, b) image = [f_x.subs(symbol_x, value) for value in domain_x] # Plot the 2D function graph fig = plt.figure(figsize=(10, 10)) plt.plot(domain_x, image) plt.show() def plot_3d_function(function, a, b): # Create sympy function f(x, y) f_xy = sp.lambdify((symbol_x, symbol_y), sp.sympify(function)) # Create domains and image domain_x = get_vector(a, b) domain_y = get_vector(a, b) domain_x, domain_y = np.meshgrid(domain_x, domain_y) image = f_xy(domain_x, domain_y) # Plot the 3D function graph fig = plt.figure(figsize=(10, 10)) ax = plt.axes(projection='3d') ax.plot_surface(domain_x, domain_y, image, rstride=1, cstride=1, cmap='viridis') plt.show() function = "x*cos(5*x)" a_value = 0 b_value = 10 if "x" and not "y" in function: plot_2d_function(function, a_value, b_value) elif "x" and "y" in function: plot_3d_function(function, a_value, b_value) else: print("You must enter a function in terms of x and/or y")

      Запустим его и получим следующий результат:

      А теперь давайте поменяем значения на следующие:

      import sympy as sp import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D symbol_x = sp.Symbol('x') symbol_y = sp.Symbol('y') def get_vector(a, b): return np.arange(a, b + 1, 0.1) def plot_2d_function(function, a, b): # Create the sympy function f(x) f_x = sp.sympify(function) # Create domain and image domain_x = get_vector(a, b) image = [f_x.subs(symbol_x, value) for value in domain_x] # Plot the 2D function graph fig = plt.figure(figsize=(10, 10)) plt.plot(domain_x, image) plt.show() def plot_3d_function(function, a, b): # Create sympy function f(x, y) f_xy = sp.lambdify((symbol_x, symbol_y), sp.sympify(function)) # Create domains and image domain_x = get_vector(a, b) domain_y = get_vector(a, b) domain_x, domain_y = np.meshgrid(domain_x, domain_y) image = f_xy(domain_x, domain_y) # Plot the 3D function graph fig = plt.figure(figsize=(10, 10)) ax = plt.axes(projection='3d') ax.plot_surface(domain_x, domain_y, image, rstride=1, cstride=1, cmap='viridis') plt.show() function = "x**2 + cos(y**2)" a_value = -3 b_value = 3 if "x" and not "y" in function: plot_2d_function(function, a_value, b_value) elif "x" and "y" in function: plot_3d_function(function, a_value, b_value) else: print("You must enter a function in terms of x and/or y")

      Если мы это запустим, то получим такой график:

      Заключение

      Что ж, вот вы и дошли до конца этой статьи, поздравляем! Сегодня мы обсудили, как построить математический график на Python всего за 10 минут. Мы поговорили про построение различных параметрических кривых в двумерном и трёхмерном пространстве и разобрали процесс построения на примерах. Теперь вы видите, какой завораживающей на самом деле может быть математика! Кроме того, построение параметрических кривых, как вы понимаете, не такой уж и сложный процесс.

      Надеемся, данная статья была вам полезна! Успехов в написании кода!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *