Позвольте мне начать с показа вам следующего графика:
Это выглядит знакомо, не так ли? Это называется гистограммой . Мы обычно рисуем их, используя разные приложения, такие как Microsoft Excel и Microsoft Word.
Если мы хотим иметь больший контроль над процессом создания графов, программное создание таких графов было бы лучшим выбором.
В этом уроке я покажу вам, как мы можем создавать гистограммы, используя Python. Готов?
Если вам интересно глубже изучить Python и узнать, как использовать возможности Python для обработки данных, почему бы не проверить эти два курса:
Какие модули нам нужны?
Чтобы выполнить задачу рисования гистограммы, нам в основном понадобятся два модуля: модуль Image и модуль ImageDraw , оба из которых будут импортированы из библиотеки изображений Python (PIL) . Модуль Image
будет использоваться для загрузки изображения, в то время ImageDraw
модуль ImageDraw
будет использоваться для создания 2D-графики (т.е. рисовать линию).
Упомянув PIL, позвольте мне показать вам, как мы можем установить его. Но я покажу вам, как установить подушку . Причиной тому является последняя версия PIL, PIL 1.1.7, выпущенная в 2009 году и поддерживающая только Python 1.5.2–2.7. Таким образом, он не поддерживает Python 3.X, и я боюсь, что его разработка была прекращена с тех пор, как последний коммит для проекта PIL был в 2011 году.
Подушка здесь приходит на помощь, поскольку она раздвоила репозиторий PIL и добавила поддержку Python 3.X. Поэтому я буду использовать подушку ради читателей, которые используют Python 3.X. Но это не мешает работать с подушкой, если вы используете предыдущие версии Python.
Установка подушки
Упомянутые в этом разделе шаги по установке Pillow предназначены для пользователей Mac OS X, поскольку в настоящее время я пишу это руководство для системы Mac OS X El Capitan, но вы можете следовать инструкциям в документации для других операционных систем.
Простой способ установить Pillow на ваш Mac — это pip , который можно установить, набрав следующую простую команду на своем терминале:
1
|
$ sudo easy_install pip
|
Подушку на этом этапе можно просто установить, набрав:
1
|
$ sudo pip install pillow
|
Построение Программы
Давайте теперь шаг за шагом пройдемся по строительным блокам программы. Первое, что нам нужно, это пустое изображение, на котором мы будем рисовать нашу гистограмму. Вы можете скачать пустое изображение .
Давайте теперь прочитаем это пустое изображение и нарисуем его. Мы можем сделать это следующим образом:
1
2
3
|
from PIL import Image, ImageDraw
img = Image.open(‘blank.png’)
draw_img = ImageDraw.Draw(img)
|
Поскольку мы хотим нарисовать гистограмму, нам нужны некоторые данные. Для этого мы можем использовать списки . Таким образом, наши данные (список) могут выглядеть следующим образом:
1
|
data = [‘4′,’5′,’87’,’1′,’44’,’83’,’93’,’2′,’54’,’84’,’100′,’64’]
|
На данный момент все, что нам нужно сделать, это нарисовать гистограмму. Мы будем рассматривать столбцы, которые мы видим на графике, как линии. Поэтому мы будем использовать метод line()
модуля ImageDraw
.
Я покажу вам код, который будет выполнять задачу рисования гистограммы, и объясню это позже:
1
2
3
4
|
for i in data:
x = x + 30
y = 200 — int(i)
draw_img.line((x,200,x,y), width=10, fill=(255,0,0,255))
|
Как видите, мы перебираем наш список и рисуем гистограмму, используя данные в списке. x = x + 30
предоставляет нам необходимое пространство между каждой точкой данных в списке по оси x. Прежде чем продолжить, я хочу напомнить вам, что точка (0,0)
на изображении — это верхняя левая точка оси. Таким образом, это было бы похоже на рисование линий вверх ногами к обычному способу, который мы привыкли при маркировке координат точек на графике.
Если мы перейдем к последней строке предыдущей части скрипта, мы можем прочитать эту часть draw_img.line((x,200, x,y)
следующим образом: нарисовать линию от точки (x,200)
до точки (x,y)
. Итак, если мы начнем с первой точки данных 4
, линия будет проведена от (34,200)
до (34,196)
. Таким образом, когда я покажу вам результат через некоторое время, ось X будет выглядеть так, как если бы это было то, к чему мы обычно привыкли (начиная с левого дна для точки (0,0)
). Хитрость заключалась в том, чтобы использовать y = 200
Как вы увидите, у нас всегда будет нарисована линия, где y = 200
для всех точек данных, и это даст нам представление о том, как мы рисовали точки на графике при просмотре нашего результата.
width
представляет ширину (толщину) линии, а fill=(255,0,0,255)
представляет цвет линии. То есть цвет RGBA
(расширение цвета RGB с альфа-каналом, который представляет непрозрачность).
Наконец, мы можем просмотреть изображение, используя инструкцию: img.show()
.
Собираем все вместе
Теперь, когда мы рассмотрели строительные блоки нашей программы, давайте соберем все вместе и посмотрим, как выглядит наш скрипт:
01
02
03
04
05
06
07
08
09
10
11
12
13
|
from PIL import Image, ImageDraw
img = Image.open(‘blank.png’)
draw_img = ImageDraw.Draw(img)
data = [‘4′,’5′,’87’,’1′,’44’,’83’,’93’,’2′,’54’,’84’,’100′,’64’]
x = 0
for i in data:
x = x + 30
y = 200 — int(i)
draw_img.line((x,200,x,y), width=10, fill=(255,0,0,255))
img.show()
|
Выход
Теперь начинается интересная часть, результат вышеприведенного сценария. Если вы запустите программу, у вас должно быть что-то похожее на следующее:
Я обрезал верхнюю часть изображения на этом снимке; это должно выглядеть больше в оригинальном выводе.
Вывод
Как мы видели из этого урока, чтобы получить больший контроль над некоторыми обычными задачами, такими как рисование графика для некоторых данных, можно использовать язык программирования (например, Python).
Нам, однако, не всегда нужно выполнять такие задачи с нуля; вместо этого мы можем воспользоваться пользовательскими библиотеками, такими как Pillow, в нашем руководстве. Использование такой библиотеки облегчило нам рисование гистограммы, а использование Python дало нам контроль и гибкость при использовании некоторых приемов для вывода графика так, как мы хотели.