Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Практическое программирование на Python. Учебное пособие

.pdf
Скачиваний:
1
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]