Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Практическое программирование на Python. Учебное пособие
.pdf
from matplotlib import pyplot as plt
x = [1,2,3,4]
y = [1,4,9,16]
plt.plot([1,2,3,4],[1,4,9,16])
plt.show()
При указании атрибута ‘ro’ график будет представлен в виде
красных точек без соединяющих линий:
plt.plot([1,2,3,4],[1,4,9,16],'ro')
Для создания заголовка графика необходимо вызвать следующую
функцию:
plt.title('My first plot')
Далее рассмотрим построения графика трех функций: sin(x) и двух
сдвинутых синусоид на pi/2. Графики будем отображать точками
разного цвета и формы. Для генерации точек по синусоиде
используем
функцию arrange() из библиотеки NumPy.
import math
import numpy as np
from matplotlib import pyplot as plt
t = np.arange(0,2.5,0.1)
y1 = np.sin(math.pi*t)
y2 = np.sin(math.pi*t+math.pi/2)
y3 = np.sin(math.pi*t-math.pi/2)
plt.plot(t,y1,'b*',t,y2,'g^',t,y3,'ys')
plt.show()
В результате получится график следующего вида
Точечный график в pyplot
51

Дополнительные возможности по работе с графиками и их
оформлению:
● для задания подписи оси x используется функция xlabel(), оси
y – ylabel(). Эти функции также могут принимать в качестве
параметров: fontsize, fontstyle, fontweight, color и т. д.;
● для задания заголовка графика используется функция title(),
которая может в качестве параметров получать label и loc
(местоположение);
● за размещение текста на поле графика отвечает функция text(),
которой вначале передаются координаты позиции надписи,
после этого – текст самой надписи;
● легенда будет размещена на графике, если вызвать функцию
legend().
Пример использования этих функций:
x = [1, 5, 10, 15, 20]
y = [1, 7, 3, 5, 11]
plt.plot(x, y, label='steel price')
plt.title('Chart price', fontsize=15)
plt.xlabel('Day', fontsize=12, color='blue')
plt.ylabel('Price', fontsize=12, color='blue')
plt.legend()
plt.grid(True)
plt.text(15, 4, 'grow up!')
plt.show()
График в pyplot
52

Оформление графиков:
● функцией setp() позволяет задавать цвет и толщину линии
графика параметрами color и linewidth
● параметр linestyle в функции setp позволяет определить тип
линии:
o ‘-‘ или ‘solid’ – непрерывная линия
o ‘–‘ или ‘dashed’ – штриховая линия
o ‘-.’ или ‘dashdot’ – штрихпунктирная линия
o ‘:’ или ‘dotted’ – пунктирная линия
x = [1, 5, 10, 15, 20]
y1 = [1, 7, 3, 5, 11]
y2 = [i*1.2 + 1 for i in y1]
y3 = [i*1.2 + 1 for i in y2]
y4 = [i*1.2 + 1 for i in y3]
plt.plot(x, y1, '-', x, y2, '--', x, y3, '-.', x, y4, ':')
plt.show()
Оформление графиков в pyplot
Размещение графиков на разных полях:
● использование функции subplot() для указания места размеще-
ния поля с графиком;
● использование функции subplots() для предварительного
задания сетки, в которую будут укладываться поля;
● использование GridSpec, для более гибкого задания геометрии
размещения полей с графиками в сетке.
53

Самый простой способ представить графики в отдельных
полях – это использовать функцию supplot() для задания их мест
размещения. До этого момента мы не работали с Фигурой (Figure)
напрямую, значения ее параметров, задаваемые по умолчанию,
нас устраивали. Для решения текущей задачи придется один
из параметров – размер подложки – задать вручную. За это отвечает
аргумент figsize функции figure(), которому присваивается
кортеж из двух float элементов, определяющих высоту и ширину
подложки.
После задания размера, указывается местоположение, куда будет
установлено поле с графиком с помощью функции subplot(). Чаще
всего используют следующие варианты вызова subplot:
● nrows: int – количество строк;
● ncols: int – количество столбцов;
● index: int – местоположение элемента;
● pos:int – позиция в виде трехзначного числа, содержащего
информацию о количестве строк, столбцов и
индексе, например, 212 – означает подготовить
разметку с двумя строками и одним столбцом,
вывести элемент в первую позицию второй строки.
Рассмотрим на примере работу с данными функциями:
x = [1, 5, 10, 15, 20]
y1 = [1, 7, 3, 5, 11]
y2 = [i*1.2 + 1 for i in y1]
y3 = [i*1.2 + 1 for i in y2]
y4 = [i*1.2 + 1 for i in y3]
plt.figure(figsize=(12, 7))
plt.subplot(2, 2, 1)
plt.plot(x, y1, '-')
plt.subplot(2, 2, 2)
plt.plot(x, y2, '--')
plt.subplot(2, 2, 3)
plt.plot(x, y3, '-.')
plt.subplot(2, 2, 4)
plt.plot(x, y4, ':')
plt.show()
54

Размещение нескольких графиков в pyplot
3.8.3. Гистограммы
Рассмотрим два способа построения гистрограмм: bar и hist.
Для анализа сгенерируем набор из 100 случайных чисел в диапазоне значений от 0 до 9
import numpy as np
data = np.random.randint(0, 10, 100)
И построим гистограмму распределения частоты, с которой
встречаются числа в последовательности
import matplotlib.pyplot as plt
plt.hist(data, bins=10, color='blue')
plt.show()
Пример гистограммы
55

Аналогичным образом можно построить гистограмму и используя функцию hist():
plt.hist(data, xbins)
plt.show()
Если же задать другой параметр bins, то можно увидеть более
привычный вид с узкими неперекрывающимися столбиками
plt.hist(data, bins=50, color='blue')
plt.show()
Пример гистограммы с узкими столбцами
3.8.4. Круговая/секторная диаграмма
Круговые диаграммы широко используются в презентациях и
офисной документации. Они позволяют показать пропорциональное
и процентное соотношение между категориями за счет деления круга
на пропорциональные сегменты. Длина каждой дуги представляет
собой пропорциональную долю каждой категории, в то время как круг
целиком представляет общую сумму всех данных, равную 100 %.
Круговые
диаграммы идеально подходят для того, чтобы быстро
сформировать представление о пропорциональном распределении данных. Однако у этой диаграммы есть ряд существенных недостатков:
● количество отображаемых значений очень ограничено, поскольку
чем больше количество значений, тем меньше размер каждого
отдельного сегмента. Соответственно, они не подходят для
работы с большими объемами данных;
● они занимают больше места, чем альтернативные графики,
например, 100 %-ные стопочные диаграммы. Основные
56

причины – размер и, как правило, необходимость в отдельном
описании условных обозначений;
● они не очень удобны для проведения точных сравнений между
показателями, поскольку визуально площадь сегментов сложнее сравнивать, нежели длину.
Приведем пример кода, который рисует круговую диаграмму с
условных значением распространенности языков программирования:
import matplotlib.pyplot as plt
plt.figure(figsize=(7,5))
x = [18, 15, 11, 9, 8, 6]
labels = ['Java', 'C', 'C++', 'PHP', '(Visual) Basic', 'Python']
explode = [0, 0, 0, 0, 0, 0.2]
plt.pie(x, labels = labels, explode = explode,
autopct = '%1.1f%%', shadow=True);
plt.show()
Круговая диаграмма
3.9. Библиотека Pandas
Pandas – это высокоуровневая библиотека Python для анализа
данных.
Рассмотрим две структуры данных этой библиотеки: Series и
DataFrame.
57

3.9.1. Pandas Series
Series (серия) – это одномерный массив. Визуально он похож на
пронумерованный список: слева в колонке находятся индексы элементов, а справа – сами элементы.
Индексом может быть числовой показатель (0, 1, 2…), буквенные
значения (a, b, c…) или другие данные, выбранные программистом.
Если особое значение не задано, то числовые индексы проставляются
автоматически. Например, от 0 до 5 – как в
следующем примере.
import pandas as pd
my_series = pd.Series([5, 3, 9, 10, 4])
print(my_series)
Результат выглядит следующим образом:
0 5
1 3
2 9
3 10
4 4
dtype: int64
Также можно задавать собственные значения индексов в квадратных скобках через index:
my_series = pd.Series([5, 3, 9, 10, 4],
index=['a', 'b', 'c', 'd', 'e'])
print(my_series)
a 5
b 3
c 9
d 10
e 4
dtype: int64
Далее с элементами можно работать через их индексы. Например,
пропишем что элементы с индексами a, b и e нужно занулить,
а другие возведем в квадрат:
my_series[['a', 'b', 'e']]=0
my_series['c'] = my_series['c']**2
my_series['d'] = my_series['d']**2
print(my_series)
58

3.9.2. Pandas DataFrame
DataFrame – это двумерный массив, похожий на таблицу / лист
Excel. В нем можно проводить такие же манипуляции с данными:
объединять в группы, сортировать по определенному признаку,
производить вычисления. Как и любая таблица, датафрейм состоит
из столбцов и строк, причем столбцами будут уже известные объекты –
Series. Для примера создадим таблицу данных с
указанием полей
для трех людей:
import pandas as pd
df = pd.DataFrame({
'Name': ['Vasya', 'Sasha', 'Masha'],
'Eyes': ['blue', 'grey', 'green'],
'Ages': [19, 18, 20,]})
print(df)
Результатом будет:
Ages Eyes Name
0 19 blue Vasya
1 18 grey Sasha
2 20 green Masha
Ключи в словаре – это названия колонок. А значения станут
строками с информацией.
Такую таблицу можно легко сохранить для дальнейшей работы
в таблицу Excel:
df.to_excel('My_DB.xlsx')
Загрузка данных из таблицы делается следующим образом:
new_table = pd.read_excel('My_DB.xlsx')
print(new_table)
3.10. Библиотека PyGame
Pygame – библиотека, предназначенная для разработки мультимедийных приложений
с графическим интерфейсом, например,
игр.
Документация, обучающие материалы и дополнительная
информация доступна разработчикам на сайте проекта:
https://www.pygame.org/docs/
59

3.10.1. Начало работы
Для начала рассмотрим следующую программу:
import pygame
import sys
print(pygame.ver)
pygame.init()
screen = pygame.display.set_mode((1200, 800))
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
Основные моменты:
● после импорта необходимых библиотек необходимо вызвать
функцию инициализации init();
● для распечатки версии используемой библиотеки выведем её
на печать ее версию;
● после этого создаем графическое окно, передав в качестве
аргумента в функцию set_mode() его разрешение в виде пары
целых чисел. В свою очередь функция вернет нам объект типа
Surface, используемый для представления изображений;
● далее запускаем основной цикл программы, в котором среди
всех событий, происходящих в нашем приложении, перехватываем событие закрытия основного графического окна пользователем.
3.10.2. Рисование прямоугольника
В библиотеке определен тип «прямоугольник»:
Rect(left, top, width, height)
Rect((left, top), (width, height))
Для создания объекта этого типа нам необходимо указать координаты левого верхнего угла прямоугольника и длины его сторон.
Обратите
● начало координат (0, 0) находится в левом верхнем углу окна;
● для того чтобы нарисовать созданный объект, используется
внимание на следующие особенности:
функция draw();
60
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
