Графики функций и поверхностей в 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 можно отобразить графики нескольких функций. Добавим 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
В трёхмерном пространстве каждая точка задаётся тремя координатами, следовательно, в трёхмерном пространстве нужно два аргумента для задания функции. В этом уроке по Питону мы зададим функцию
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)
Получим график трехмерной поверхности в цветовой гамме в специальном окне

Изменим параметры построения трехмерной поверхности, уменьшим размер сетик, сделаем поверхность более плавной и точной для этого уменьшаем параметры и сменим цветовую гамму на viridis
rstride = 2,
cstride = 2,
cmap = cm.viridis)
Получим график трехмерной поверхности в Python более точный и в другой цветовой гамме

Вернуться к содержанию курса python
Следующая тема Классы в Питон
Matplotlib: Научная графика в Python

Шабанов Павел написал замечательный электронный учебник «Научная графика в Python».
Учебник состоит из 13 глав, объединённых в 3 части.
Первая часть посвящена знакомству с библиотекой matplotlib. Здесь изложены основы по созданию графики в matplotlib с помощью модуля pyplot.
Вторая часть описывает логическую структуру рисунка в matplotlib и раскрывает особенности работы с элементами рисунка разных иерархических уровней: рисунком, областями рисования, координатными осями, делениями осей. Показаны основы работы с matplotlib в объектно-ориентированном стиле.
Третья часть посвящена специальным элементам рисунка: легенде, цветовой шкале, особым видам области рисования и координатных осей.
Каждая глава учебника содержит краткое введение, список полезных электронных ресурсов по теме главы, практическое руководство и несколько примеров.
Часть I Основы matplotlib
- Глава 1 Библиотека matplotlib. Pyplot
- Глава 2 Основные графические команды
- Глава 3 Работа с текстом и шрифтами
- Глава 4 Цвет и цветовая палитра
Часть II Структура рисунка в matplotlib
- Глава 5 Рисунок
- Глава 6 Область рисования
- Глава 7 Мультиоконные рисунки
- Глава 8 Координатные оси
- Глава 9 Деления координатных осей
Часть III Специальные элементы рисунка в matplotlib
- Глава 10 Особенности координатных осей
- Глава 11 Графики в полярной системе координат
- Глава 12 Легенда
- Глава 13 Цветовая шкала
Это пособие по matplotlib действительно стоит прочитать.
Для вставки кода на Python в комментарий заключайте его в теги
- Модуль csv - чтение и запись CSV файлов
- Создаём сайт на Django, используя хорошие практики. Часть 1: создаём проект
- Онлайн-обучение Python: сравнение популярных программ
- Книги о Python
- GUI (графический интерфейс пользователя)
- Курсы Python
- Модули
- Новости мира Python
- NumPy
- Обработка данных
- Основы программирования
- Примеры программ
- Типы данных в Python
- Видео
- Python для Web
- Работа для Python-программистов
- Сделай свой вклад в развитие сайта!
- Самоучитель Python
- Карта сайта
- Отзывы на книги по Python
- Реклама на сайте
Python: Построение графиков по данным из файла
Когда я был ВУЗ(овцем) нам на первом курсе на лабораторных работах по Физике часто приходилось строить графики. Причем рисовать их приходилось от руки на миллиметровой бумаге. Выглядело это кустарно. С первого раза начертить график не получалось. Приходилось стирать ластиком. Миллиметровая шкала стиралась. На графике появлялись белые облака.
Тогда в 200x просто не хватало навыков программирования чтобы отрисовать эти графики на PC. Сейчас же построить график можно с легкостью на LapTop(е). Причем существует целая куча разных способов построить график на PC. Это можно делать в Google Spreadsheets, MatLab, MathCAD, GNU Octave, GNU Plot, MS Excel, GraphViz, Asymptote.
Попробуем еще построить график на Python при помощи программного компонента matplotlib.
Постановка задачи:
Есть файл LiLog.csv. Вот несколько его строчек:
14, 1.833, 22.25, 22:43:09, 9/7/2023, 1517544445 15, 0.833, 22.25, 22:43:29, 9/7/2023, 1517544465 16, 0.000, 22.25, 22:43:49, 9/7/2023, 1517544485 17, 0.833, 22.25, 22:44:09, 9/7/2023, 1517544505
Надо построить 2D график, где по оси Х n-ный столбец, а по оси Y - k-тый столбец из текстового файла.
Что надо из софтвера?
Программа
Назначение
Интерпретатор язык программирования Python
Модуль для визуализации
Модуль синтаксического разбора *.CSV файлов
Текстовый редактор для написания Python скрипта и редактирования файла с исходными данными для графика
Решение
Вот этот скрипт берет *.csv файл и строит график по 4му и 2му столбцу.
import matplotlib.pyplot as plt import csv X = [] Y = [] with open('LiLog.csv', 'r') as datafile: plotting = csv.reader(datafile, delimiter=';') for ROWS in plotting: X.append(float(ROWS[5])) Y.append(float(ROWS[1])) plt.plot(X, Y) plt.title('Line Graph using CSV') plt.xlabel('X') plt.ylabel('Y') plt.show()
Что происходит в этом скрипте. Программа создает 2 списка: X Y. В список X помещает числа из 4го столбца в список Y помещает данные из второго столбца. Затем программа отрисовывает график по этим значениям на канве в отдельном окне.
Получился вот такой график

Также в график можно добавить еще один график, пояснения (легенду).
import matplotlib.pyplot as plt import csv X = [] Y = [] with open('LiLog.csv', 'r') as datafile: plotting = csv.reader(datafile, delimiter=';') for ROWS in plotting: X.append(float(ROWS[5])) #X.append('<> <>'.format(ROWS[3], ROWS[4])) Y.append(float(ROWS[1])) print ('X <> Nums'.format(len(X))) print ('Y <> Nums'.format(len(Y))) threshold=63.0 T=[threshold]*len(Y) print ('Type X <> '.format(type(X))) print ('Type Y <> '.format(type(Y))) print ('Type T <> '.format(type(T))) plt.plot(X, Y) plt.plot(X, T) plt.title('Illumination change') plt.xlabel('Time,[s]') plt.ylabel('Light level, [Lx]') plt.grid() plt.xticks(rotation=-90) plt.legend(['illumination', 'threshold <> Lx'.format(threshold)]) plt.show()
Чтобы это код исполнился надо предварительно в консоли прописать
pip install matplotlib
Вот, например, для наглядности добавлена прямая порогового значения для данного измерения на уровне 63 Люкс.

График в matplotlib не просто статический. Его можно увеличивать в интересующем месте и подставить поля графика в меню, которое расположено в нижнем левом углу окна.

Достоинства построения графиков на Python
- Это бесплатно. В отличие от MatLab, MathCAD в Python вы можете строить графики абсолютно бесплатно.
- Есть аналитика. Можно увеличивать график, сохранять график в формате *.png файла, задавать масштаб, подстраивать ширину полей, разворачивать шкалу, накладывать сетку.
- По Python скрипту можно сгенерировать *.exe файл на случай, если захочется скрыть алгоритм построения графика.
- Нет артефактов и временных файлов. Никаких *.o *.ld не нужно, как если бы вы решили писать графопостроитель на С++. Есть только *.py файл с исходником и больше ничего не нужно.
- Всё делается чисто кодом. Вам даже мышка не нужна чтобы построить график. Не будет болеть запястье.
- Благодаря Python можно исполнять скрипты в любой операционной системе: Windows, Linux и проч. Главное чтобы был интерпретатор Python и графическая оболочка.
Недостатки построения графиков в Python
- Не совсем ясно как отображать отсчеты графика в реальном времени. Например когда числа поступают с улицы из последовательного COM пота или TCP сокета.
Вывод
Интерпретатор Python в связке с Matplotlib это отличный вариант для визуализации экспериментальных данных из текстового *.csv файла.
Акроним
Расшифровка
Пострение графиков
Фундаментальная задача программирования — вычисление математических и, в частности, алгебраических функций. Казалось бы, что проще? Однако, запись выражения на языке математики не принимается напрямую языком программирования. Выражение нужно написать в виде, который будет понятен тому или иному языку программирования.
Например, y = x², должно быть записано как y = x*x или y = x**2 .
Упражнение №1
Запишите выражение, заданное формулой, в виде, подходящем для языка Python.

и найдите его значения в точках 1, 10, 1000.
Для вычисления математических функций мы не будем использовать стандартную библиотеку math. Т.к. она не работает с векторами. В нашем случае разумней обратить внимание на библиотеку numpy. Данная библиотека обеспечивает удобную работу с векторам.
Т.е., если у нас есть вектор x=[1, 2, 3, 4] и мы вызовим numpy.log(x), то логарифм будет взят от каждого элемента списка и возвращен будет список значений.
Аналогичная функция в модуля math ожидает число, т.е. нельзя сделать math.log(x), нужно делать math.log(x[0]) и т.д.
Традиционно библиотека numpy подключается командой:
import numpy as np
Данный вызов сообщает, что подключить numpy под псевдонимом np. Это делается, чтобы не писать каждый раз:
numpy.cos(x)
np.cos(x)
Такой код, с более коротким именем библиотеки, элементарно, проще читать.
Основные математические функции и константы функии, которые нам понадобятся из numpy:
| Функция библиотеки math | Математическая функция |
|---|---|
| np.pi | Число pi |
| np.e | Число e |
| np.cos | Косинус |
| np.sin | Синус |
| np.tan | Тангенс |
| np.acos | Арккосинус |
| np.asin | Арксинус |
| np.atan | Арктангенс |
| np.exp | Экспонента |
| np.log | Логарифм |
Функция log вычисляет натуральный логарифм. Чтобы вычислить логарифм по другому основанию, нужно воспользоваться формулой перехода. Например, если мы хотим получить логарифм x по основанию 2, нужно написать:
np.log(x) / np.log(2)
Построение графиков
matplotlib - набор дополнительных модулей (библиотек) языка Python. Предоставляет средства для построения самых разнообразных 2D графиков и диаграмм данных. Отличается простотой использования — для построения весьма сложных и красочно оформленных диаграмм достаточно нескольких строк кода. При этом качество получаемых изображений более чем достаточно для их публикования. Также позволяет сохранять результаты в различных форматах, например Postscript, и, соответственно, вставлять изображения в документы TeX. Предоставляет API для встраивания своих графических объектов в приложения пользователя.
Пример построения графика функции:
import numpy as np import matplotlib.pyplot as plt x = np.arange(-10, 10.01, 0.01) plt.plot(x, x**2) plt.show()

На одном рисунке можно построить несколько графиков функций:
import numpy as np import matplotlib.pyplot as plt x = np.arange(-10, 10.01, 0.01) plt.plot(x, np.sin(x), x, np.cos(x), x, -x) plt.show()

Также довольно просто на график добавить служебную информацию и отобразить сетку:
import numpy as np import matplotlib.pyplot as plt x = np.arange(-10, 10.01, 0.01) plt.plot(x, np.sin(x), x, np.cos(x), x, -x) plt.xlabel(r'$x$') plt.ylabel(r'$f(x)$') plt.title(r'$f_1(x)=\sin(x),\ f_2(x)=\cos(x),\ f_3(x)=-x$') plt.grid(True) plt.show()

Или используя legend() , где можно указать место расположения подписей к кривым на графике в параметре loc . Подписи могут быть явно переданы legend((line1, line2, line3), ('label1', 'label2', 'label3')) или могут быть переданы в аргумет label , как в примере ниже. Чтобы сохранить график нужно воспользоваться savefig(figure_name) , где figure_name явлется строкой назания файла с указанием расширения. Для текстовых полей можно изменять шрифт ( fontsize ), для большей читаемости графика, а его размер указывается с помощью figure(figsize=(10, 5)) .
import numpy as np import matplotlib.pyplot as plt x = np.arange(-10, 10.01, 0.01) plt.figure(figsize=(10, 5)) plt.plot(x, np.sin(x), label=r'$f_1(x)=\sin(x)$') plt.plot(x, np.cos(x), label=r'$f_2(x)=\cos(x)$') plt.plot(x, -x, label=r'$f_3(x)=-x$') plt.xlabel(r'$x$', fontsize=14) plt.ylabel(r'$f(x)$', fontsize=14) plt.grid(True) plt.legend(loc='best', fontsize=12) plt.savefig('figure_with_legend.png') plt.show()

Текстовые поля в matplotlib могут содержать разметку LaTeX, заключенную в знаки $. Буква r перед кавычками говорит python, что символ "\" следует оставить как есть и не интерпретировать как начало спецсимвола (например, перевода строки - "\n").
Работа с matplotlib основана на использовании графических окон и осей (оси позволяют задать некоторую графическую область). Все построения применяются к текущим осям. Это позволяет изображать несколько графиков в одном графическом окне. По умолчанию создаётся одно графическое окно figure(1) и одна графическая область subplot(111) в этом окне. Команда subplot позволяет разбить графическое окно на несколько областей. Она имеет три параметра: nr , nc , np . Параметры nr и nc определяют количество строк и столбцов на которые разбивается графическая область, параметр np определяет номер текущей области ( np принимает значения от 1 до nr*nc ). Если nr*nc
import numpy as np import matplotlib.pyplot as plt x = np.arange(-10, 10.01, 0.01) t = np.arange(-10, 11, 1) #subplot 1 sp = plt.subplot(221) plt.plot(x, np.sin(x)) plt.title(r'$\sin(x)$') plt.grid(True) #subplot 2 sp = plt.subplot(222) plt.plot(x, np.cos(x), 'g') plt.axis('equal') plt.grid(True) plt.title(r'$\cos(x)$') #subplot 3 sp = plt.subplot(223) plt.plot(x, x**2, t, t**2, 'ro') plt.title(r'$x^2$') #subplot 4 sp = plt.subplot(224) plt.plot(x, x) sp.spines['left'].set_position('center') sp.spines['bottom'].set_position('center') plt.title(r'$x$') plt.show()

График может быть построен в полярной системе координат, для этого при создании subplot необходимо указать параметр polar=True :
import numpy as np import matplotlib.pyplot as plt plt.subplot(111, polar=True) phi = np.arange(0, 2*np.pi, 0.01) rho = 2*phi plt.plot(phi, rho, lw=2) plt.show()

Или может быть задан в параметрической форме (для этого не требуется никаких дополнительных действий, поскольку два массива, которые передаются в функцию plot воспринимаются просто как списки координат точек, из которых состоит график):
import numpy as np import matplotlib.pyplot as plt t = np.arange(0, 2*np.pi, 0.01) r = 4 plt.plot(r*np.sin(t), r*np.cos(t), lw=3) plt.axis('equal') plt.show()

График функции двух переменных может быть построен, например, так:
from mpl_toolkits.mplot3d import axes3d import matplotlib.pyplot as plt import numpy as np ax = axes3d.Axes3D(plt.figure()) i = np.arange(-1, 1, 0.01) X, Y = np.meshgrid(i, i) Z = X**2 - Y**2 ax.plot_wireframe(X, Y, Z, rstride=10, cstride=10) plt.show()

Добавление текста на график: Команду text() можно использовать для добавления текста в произвольном месте (по умолчанию координаты задаются в координатах активных осей), а команды xlabel() , ylabel() и title() служат соответственно для подписи оси абсцисс, оси ординат и всего графика. Для более полной информации смотрите «Text introduction» раздел на оф. сайте.
import numpy as np import matplotlib.pyplot as plt mu, sigma = 100, 15 x = mu + sigma * np.random.randn(10000) # the histogram of the data n, bins, patches = plt.hist(x, 50, density=True, facecolor='g', alpha=0.75) plt.xlabel('Smarts') plt.ylabel('Probability') plt.title('Histogram of IQ') plt.text(60, .030, r'$\mu=100,\ \sigma=15$') plt.text(50, .033, r'$\varphi_<\mu,\sigma^2>(x) = \frac <\sigma\sqrt<2\pi>> \,e^< -\frac<(x- \mu)^2>> = \frac \varphi\left(\frac\right),\quad x\in\mathbb $', fontsize=20, color='red') plt.axis([40, 160, 0, 0.04]) plt.grid(True) plt.show()

plot() — универсальная команда и в неё можно передавать произвольное количество аргументов. Например, для того, чтобы отобразить y в зависимости от x , можно выполнить команду:
import matplotlib.pyplot as plt plt.plot([1, 2, 3, 4], [1, 4, 9, 16]) plt.show()

Каждую последовательность можно отобразить своим типом точек:
import numpy as np import matplotlib.pyplot as plt # равномерно распределённые значения от 0 до 5, с шагом 0.2 t = np.arange(0., 5., 0.2) # красные чёрточки, синие квадраты и зелёные треугольники plt.plot(t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^') plt.show()

Также в matplotlib существует возможность строить круговые диаграммы:
import numpy as np import matplotlib.pyplot as plt data = [33, 25, 20, 12, 10] plt.figure(num=1, figsize=(6, 6)) plt.axes(aspect=1) plt.title('Plot 3', size=14) plt.pie(data, labels=('Group 1', 'Group 2', 'Group 3', 'Group 4', 'Group 5')) plt.show()

И аналогичным образом столбчатые диаграммы:
import numpy as np import matplotlib.pyplot as plt objects = ('A', 'B', 'C', 'D', 'E', 'F') y_pos = np.arange(len(objects)) performance = [10,8,6,4,2,1] plt.bar(y_pos, performance, align='center', alpha=0.5) plt.xticks(y_pos, objects) plt.ylabel('Value') plt.title('Bar title') plt.show()

Цветовые карты используются, если нужно указать в какие цвета должны окрашиваться участки трёхмерной поверхности в зависимости от значения Z в этой области. Цветовую карту можно задать самому, а можно воспользоваться готовой. Рассмотрим использование цветовой карты на примере графика функции z(x,y)=sin(x)*sin(y)/(x*y) .
import pylab from mpl_toolkits.mplot3d import Axes3D from matplotlib import cm import numpy def makeData(): x = numpy.arange(-10, 10, 0.1) y = numpy.arange(-10, 10, 0.1) xgrid, ygrid = numpy.meshgrid(x, y) zgrid = numpy.sin(xgrid)*numpy.sin(ygrid)/(xgrid*ygrid) return xgrid, ygrid, zgrid x, y, z = makeData() fig = pylab.figure() axes = Axes3D(fig) axes.plot_surface(x, y, z, rstride=4, cstride=4, cmap=cm.jet) pylab.show()

Альтернативой к использованию mpl_toolkits.mplot3d является библиотека plotly , которая позволяет интерактивно взаимодействовать с графиком, поворачивая его или увеличивая некоторую область в пространсте.
Функция eval()
В Python есть встроенная функция eval() , которая выполняет строку с кодом и возвращает результат выполнения:
>>> eval("2 + 3*len('hello')") 17 >>>
Это очень мощная, но и очень опасная инструкция, особенно если строки, которые вы передаёте в eval , получены не из доверенного источника. Если строкой, которую мы решим скормить eval() , окажется "os.system('rm -rf /')" , то интерпретатор честно запустит процесс удаления всех данных с компьютера.
Упражнение №2
Постройте график функции
и по графику найдите найдите корни уравнения y(x) = 0. (Не нужно применять численных методов — просто приблизьте график к корням функции настолько, чтобы было удобно их найти.)
Упражнение №3
Постройте график функции

Упражнение №4
Используя функцию eval() постройте график функции, введённой с клавиатуры. Чтобы считать данные с клавиатуры, используйте функцию input() . Попробуйте включить эффект «рисование от руки» посредством вызова plt.xkcd() . Посольку эта функция применяет некоторый набор настроек, избавиться от которых впоследствие не так просто, удобнее использовать ее как "контекстный менеджер" - это позволяет применить настройки временно, только к определенному блоку кода. Для этого используется ключевое слово with:
with plt.xkcd(): plt.pie([70, 10, 10, 10], labels=('В комментариях', 'В Ираке', 'В Сирии', 'В Афганистане')) plt.title('Где ведутся самые ожесточенные бои')

Отображение погрешностей
С помощью метода plt.errorbar можно рисовать точки с погрешностями измерений, как для лабораторных работ. Погрешности по осям абсцисс и ординат задаются в параметрах (соответственно) xerr и yerr .
import matplotlib.pyplot as plt x = [1, 2, 3, 4, 5] y = [0.99, 0.49, 0.35, 0.253, 0.18] plt.errorbar(x, y, xerr=0.05, yerr=0.1) plt.grid() plt.show()

Альтернативой для plt.errorbar может слудить plt.fill_between , который заполняет область графика между кривыми, чтобы регулировать прозрачность используется аргумент alpha . Это число из отрезка [0, 1], на которое домножоается интенсивность цвета заполнения между кривыми.
import numpy as np import matplotlib.pyplot as plt x = np.arange(0, 10, 0.01) plt.plot(x, x**2, label=r'$f = x^2$') plt.scatter(x, x**2 + np.random.randn(len(x))*x, s=0.3) plt.fill_between(x, 1.3*x**2, 0.7*x**2, alpha=0.3) plt.legend(loc='best') plt.savefig('figure_fill_between.png') plt.show()

В уже использованном модуле numpy есть метод polyfit, позволяющий приближать данные методом наименьших квадратов. Он возвращает погрешности и коэффициенты полученного многочлена.
x = [1, 2, 3, 4, 5, 6] y = [1, 1.42, 1.76, 2, 2.24, 2.5] p, v = np.polyfit(x, y, deg=1, cov=True) >>> p array([0.28517032, 0.80720757]) >>> v array([[0.00063242, -0.00221348], [-0.00221348, 0.00959173]])
Многочлен задается формулой p(x) = p[0] * x**deg + . + p[deg]
Для того, чтобы не выписывать каждый раз руками эту формулу для разных степеней, есть функция poly1d , которая возвращает функцию полинома, описанного точками p. Возвращенная функция может принимать на вход не только число, но и список значений, в таком случае, будет вычислено значение функции в каждой точке списка и возвращен список результатов.
p_f = np.poly1d(p) p_f(0.5) p_f([1, 2, 3])
Упражнение №5
Приблизить данные из приведённого примера с погрешностями или свои собственные (из лабораторного практикума по общей физике) многочленами первой и второй степени. Начертить точки с погрешностями и полученные аппроксимационные кривые на одном графике.
Упражнение №6 *
Постройте график функции Вейерштрасса
Сайт построен с использованием Pelican. За основу оформления взята тема от Smashing Magazine. Исходные тексты программ, приведённые на этом сайте, распространяются под лицензией GPLv3, все остальные материалы сайта распространяются под лицензией CC-BY.