Построить график поверхности 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()

Читайте также:  Php null to integer

Получим график синусоиды в 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)

Читайте также:  How to Import SQL File in Mysql Database using PHP

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

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

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

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

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

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

Источник

Как строить трехмерные графики

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

Все дополнительные классы для работы в 3D находятся в модуле:

и вначале мы его импортируем в нашу программу наряду с самим пакетом matplotlib и numpy:

import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D

А, затем, создадим трехмерную систему координат:

fig = plt.figure(figsize=(7, 4)) ax_3d = Axes3D(fig) plt.show()

При выполнении этой простой программы, мы в окне увидим три пространственные оси, которые можно вращать с помощью курсора мышки:

Того же самого результат можно добиться, используя параметр projection при создании системы координат:

fig = plt.figure(figsize=(7, 4)) ax_3d = fig.add_subplot(projection='3d')

Как именно создавать трехмерные оси, зависит от вашего выбора и удобства при написании конкретных программ. Я остановлюсь на втором способе.

  • plot() – линейный 2D график в трех измерениях;
  • step() – ступенчатый 2D график в трех измерениях;
  • scatter() – точеный график 3D график.
  • plot_wireframe() – построение каркасной поверхности в 3D;
  • plot_surface() – построение непрерывной 3D поверхности.
x = np.linspace(0, 10, 50) z = np.cos(x) ax_3d.plot(x, x, z)

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

ax_3d.set_xlabel('x') ax_3d.set_ylabel('y') ax_3d.set_zlabel('z')

Но то, что мы получили, это не совсем трехмерный график. Скорее, это двумерная косинусоида в трех измерениях. Давайте построим настоящее трехмерное изображение, например, вот такой функции: Первое, что нам здесь нужно сделать – это сформировать двумерную сетку координат по осям x и y: То есть, должны быть сформированы двумерные массивы x, y, которые для текущей точки с индексами (i, j) возвращают ее координаты в плоскости xy. Для регулярных сеток эти массивы можно сформировать следующим образом. Определим множество координат x (для столбцов) и y (для строк), например, так:

xgrid, ygrid = np.meshgrid(x, y)

На выходе получим двумерные массивы со значениями: То есть, смотрите, теперь для любой пары индексов (i, j) мы легко сможем получить координаты точки в плоскости xy:

(xgrid[1, 2], ygrid[1, 2]) = (3, 5) (xgrid[3, 0], ygrid[3, 0]) = (1, 8)

Но зачем было так все усложнять? Почему бы не использовать одномерные массивы x, y вместо двумерных xgrid, ygrid? Дело в том, что одномерные массивы, которые описывают расположение строк и столбов, могут формировать только регулярные сетки, то есть, прямоугольные. А что, если нужно сформировать гексагональную сетку, которая выглядит, следующим образом: Здесь уже не получится обойтись указанными одномерными массивами, а нужно прописывать узлы двумерными массивами. Именно поэтому, в общем случае, и реализовано отображение через двумерные массивы трехмерных графиков. Итак, давайте теперь построим полноценный трехмерный график синусоиды на регулярной сетке. Для этого мы сначала сформируем координаты узлов в плоскости xy:

x = np.arange(-2*np.pi, 2*np.pi, 0.2) y = np.arange(-2*np.pi, 2*np.pi, 0.2) xgrid, ygrid = np.meshgrid(x, y)
zgrid = np.sin(xgrid) * np.sin(ygrid) / (xgrid * ygrid)
ax_3d.plot_wireframe(xgrid, ygrid, zgrid)

то результат будет следующий: Как видите, мы получили полноценный каркасный трехмерный график синусоиды. Или же можно построить полноценную поверхность в виде синусоиды, используя функцию plot_surface():

ax_3d.plot_surface(xgrid, ygrid, zgrid)

Фактически, только этим две эти функции и отличаются друг от друга: первая строит 3D-каркас, а вторая 3D-поверхность. У этих функций есть следующие параметры для настройки внешнего вида графика:

Читайте также:  Python byte array to string array
Параметр Описание
x, y, z 2D массивы для построения трехмерных графиков.
rcount, ccount Максимальное число элементов каркаса по координатам x и y (по умолчанию 50).
rstride, cstride Величина шага, с которым будут выбираться элементы из массивов x, y (параметры rstride, cstride и rcount, ccount – взаимоисключающие).
color Цвет графика
cmap Цветовая карта графика

Например, если установить параметры:

ax_3d.plot_surface(xgrid, ygrid, zgrid, rstride=5, cstride=5, cmap='plasma')

то получим следующий вид нашей синусоиды: В заключение этого занятия приведу пример построения этого же графика набором точек, используя функцию scatter():

ax_3d.scatter(xgrid, ygrid, zgrid, s=1, color='g')

Увидим следующий результат: Вот так в базовом варианте можно выполнять построения трехмерных графиков в пакете matplotlib. Этой информации достаточно для большинства прикладных задач. Ну а если потребуется реализовать что-то особенное, тогда прямой путь к документации: https://matplotlib.org/stable/api/_as_gen/mpl_toolkits.mplot3d.axes3d.Axes3D.html

Источник

Оцените статью