В этом примере создается случайное блуждание из 50 000 точек (что в большей степени соответствует реальным данным), и каждая точка рисуется с размером s=1. Как видно из рис. 15.10, изображение получается эфемерным и туманным. Простая точечная диаграмма превратилась в произведение искусства!
Поэкспериментируйте с этим кодом и посмотрите, насколько вам удастся увеличить количество точек в случайном блуждании, прежде чем система начнет заметно «тормозить» или диаграмма потеряет свою визуальную привлекательность.
Рис. 15.10. Случайное блуждание из 50 000 точек
Изменение размера диаграммы для заполнения экрана
Визуализация гораздо эффективнее передает закономерности в данных, если она адаптирована под размер экрана. Чтобы диаграмма лучше смотрелась на экране, измените размер области просмотра matplotlib:
rw_visual.py
...
while True:
# Make a random walk, and plot the points.
rw = RandomWalk()
rw.fill_walk()
. .
. .# Назначение размера области просмотра.
. .plt.figure(figsize=(10, 6))
...
Функция figure() управляет шириной, высотой, разрешением и цветом фона диаграммы. Параметр figsize получает кортеж с размерами окна диаграммы в дюймах.
Python предполагает, что разрешение экрана составляет 80 пикселов на дюйм; если этот код не дает точного размера, внесите необходимые изменения в числа. Или, если вы знаете разрешение экрана в вашей системе, передайте его figure() в параметре dpi для выбора размера, эффективно использующего доступное пространство:
plt.figure(dpi=128, figsize=(10, 6))
Упражнения
15-3. Молекулярное движение: измените программу rw_visual.py и замените plt.scatter() вызовом plt.plot(). Чтобы смоделировать путь пыльцевого зерна на поверхности водяной капли, передайте значения rw.x_values и rw.y_values и включите аргумент linewidth. Используйте 5000 точек вместо 50 000.
15-4. Измененные случайные блуждания: в классе RandomWalk значения x_step и y_step генерируются по единому набору условий. Направление выбирается случайно из списка [1, -1], а расстояние — из списка [0, 1, 2, 3, 4]. Измените значения в этих списках и посмотрите, что произойдет с общей формой диаграммы. Попробуйте применить расширенный список вариантов расстояния (например, от 0 до 8) или удалите –1 из списка направлений по оси x или y.
15-5. Рефакторинг: метод fill_walk() получился слишком длинным. Создайте новый метод с именем get_step(), который определяет расстояние и направление для каждого шага, после чего вычисляет этот шаг. В результате метод fill_walk() должен содержать два вызова get_step():
x_step = get_step()
y_step = get_step()
Рефакторинг сокращает размер fill_walk(), а метод становится более простым и понятным.
Моделирование бросков кубиков в Pygal
В этом разделе мы воспользуемся пакетом визуализации Pygal для создания файлов с масштабируемой векторной графикой. Такие файлы хорошо подходят для визуализаций, имеющих разное представление на экранах разного размера, потому что изображение автоматически масштабируется по размерам экрана зрителя. Если вы собираетесь использовать свои визуализации в веб-приложениях, Pygal будет хорошим вариантом; ваша работа будет хорошо смотреться на любом устройстве, которое будет использоваться для просмотра ваших визуализаций.
В этом проекте мы займемся анализом результатов бросков кубиков. При броске одного шестигранного кубика существует равная вероятность выпадения любого числа от 1 до 6. С другой стороны, при броске двух кубиков некоторые суммы выпадают с большей вероятностью, чем другие. Чтобы определить, какие числа наиболее вероятны, мы сгенерируем набор данных, представляющих брошенные кубики. Затем на базе данных большого количества бросков будет построена диаграмма, по которой можно определить, какие результаты более вероятны.
Броски кубиков часто используются в математике для пояснения различных типов анализа данных. Впрочем, они также находят применение в реальных приложениях — скажем, в казино и в обычных играх («Монополия», ролевые игры и т.д.).
Установка Pygal
Установите Pygal при помощи pip. (Если вы еще не использовали pip, обратитесь к разделу «Установка пакетов Python с использованием pip» на с. 227.)
В системах Linux и OS X команда должна выглядеть примерно так:
pip install --user pygal
В системе Windows она выглядит так:
python -m pip install --user pygal
ПРИМЕЧАНИЕ
Возможно, при установке пакетов вам придется использовать команду pip3 вместо pip. Если же эта команда не работает, попробуйте исключить флаг --user.
Галерея Pygal
Примеры визуализаций, которые могут быть построены с использованием Pygal, представлены в галерее диаграмм: зайдите на сайт http://www.pygal.org/, щелкните на ссылке Documentation, затем щелкните на ссылке Chart types. Каждый пример сопровождается исходным кодом, так что вы сможете увидеть, как была построена каждая из визуализаций.
Создание класса кубика
Для моделирования броска одного кубика мы будем использовать следующий класс:
die.py