Вступление
В этом руководстве мы узнаем, как использовать библиотеку Bokeh в Python. Большинство из вас слышали о matplotlib, numpy, seaborn и т. Д., Поскольку это очень популярные библиотеки Python для графики и визуализации. Что отличает Bokeh от этих библиотек, так это то, что он позволяет динамическую визуализацию, которая поддерживается современными браузерами (поскольку визуализирует графику с использованием JS и HTML) и, следовательно, может использоваться для веб-приложений с очень высоким уровнем интерактивности.
Bokeh также доступно на языках R и Scala; однако его аналог на Python используется чаще, чем другие.
Монтаж
Самый простой способ установить Boken с помощью Python - через диспетчер пакетов pip. Если в вашей системе установлен pip, выполните следующую команду, чтобы загрузить и установить Bokeh:
$ pip install bokeh
Примечание : если вы выберете этот метод установки, в вашей системе уже должен быть установлен numpy.
Другой метод установки Bokeh - через дистрибутив Anaconda. Просто зайдите в терминал или командную строку и запустите эту команду:
$ conda install bokeh
После завершения этого шага выполните следующую команду, чтобы убедиться, что установка прошла успешно:
$ bokeh --version
Если указанная выше команда выполняется успешно, т.е. версия печатается, вы можете использовать библиотеку боке в своих программах.
Упражнения по кодированию
В этой части мы будем выполнять несколько практических примеров, вызывая функции библиотеки Bokeh для создания интерактивных визуализаций. Начнем с попытки сделать квадрат.
Примечание . Комментарии в кодах в этой статье очень важны; они не только объяснят код, но и передадут другую значимую информацию. Кроме того, могут быть «альтернативные» или дополнительные функции, которые будут закомментированы, но вы можете попробовать запустить их, раскомментировав эти строки.
Построение основных фигур
Здесь мы указываем x
и y
для точек, которые будут последовательно
отслеживаться при рисовании линии. Функция figure
создает экземпляр
figure
, в котором хранятся конфигурации графика, который вы хотите
построить. Здесь мы можем указать как диапазон X, так и диапазон Y
графика, который мы установили от 0 до 4, что охватывает диапазон наших
данных. Затем line
рисует линию между нашими координатами, которая
имеет форму квадрата.
from bokeh.io import output_file, output_notebook
from bokeh.plotting import figure, show
x = [1, 3, 3, 1, 1]
y = [1, 1, 3, 3, 1]
# Display the output in a separate HTML file
output_file('Square.html', title='Square in Bokeh')
#output_notebook() # Uncomment this line to use iPython notebook
square = figure(title='Square Shape',
plot_height=300, plot_width=300,
x_range=(0, 4), y_range=(0, 4))
# Draw a line using our data
square.line(x, y)
#square.circle(x, y) # Uncomment this line to add a circle mark on each coordinate
# Show plot
show(square)
Возможно, вы заметили в коде, что есть альтернатива output_file
,
которая вместо этого показывает результат в записной книжке Jupyter с
помощью функции output_notebook
Если вы предпочитаете использовать
ноутбук , то замените output_file
функцию с output_notebook
в коде
всей этой статьи.
Когда вы запустите приведенный выше сценарий, вы должны увидеть следующий квадрат, открывающийся на новой вкладке браузера по умолчанию.
Выход:
{.ezlazyload .img-responsive}
На изображении выше вы можете видеть инструменты справа (панорамирование, масштабирование рамки, масштабирование колеса, сохранение, сброс, справка - сверху вниз); эти инструменты позволяют вам взаимодействовать с графиком.
Еще одна важная вещь, которая пригодится, это то, что после каждого вызова функции "show", если вы создаете новый объект "figure", последующий вызов функции "show" с новой фигурой, переданной в качестве аргумента, приведет к ошибке. . Чтобы устранить эту ошибку, запустите следующий код:
from bokeh.plotting import reset_output
reset_output()
Метод reset_output
сбрасывает идентификатор фигуры, который в show
чтобы ей можно было назначить новый.
То, что мы сделали до сих пор, довольно простое, давайте теперь
попробуем составить несколько уравнений линий / карт на одном графике.
Самый простой пример для этого - попытаться нарисовать линии для
уравнений y = x
, y = x^2
и y = x^3
. Итак, давайте посмотрим, как
мы можем сделать график, чтобы отображать их все сразу, используя Bokeh:
from bokeh.plotting import figure, output_file, show
# Declare data for our three lines
x = [1, 2, 3, 4, 5, 6]
x_square = [i**2 for i in x]
x_cube = [i**3 for i in x]
# Declare HTML file as output for when show is called
output_file("Eqs.html")
lines = figure(title='Line Comparisons', x_range=(0, 8), y_range=(0,100),
x_axis_label='X-Axis', y_axis_label='Y-Axis')
lines.line(x, x, legend="y = x", line_width=3) # Line for the equation y=x
lines.square(x, x, legend="y = x", size=10) # Add square boxes on each point on the line
lines.line(x, x_square, legend="y = x^2", line_width=3) #Line for the equation y=x^2
lines.circle(x, x_square, legend="y = x^2", size=10) # Add circles to points since it partially overlaps with y=x
lines.line(x, x_cube, legend="y = x^3", line_width=3) # Line for the equation y=x^3
lines.square(x, x_cube, legend="y = x^2", size=10) # Add square boxes on each point of the line
# Display the graph
show(lines)
Выход:
{.ezlazyload .img-responsive}
Прежде чем мы продолжим рисовать еще несколько графиков, давайте сначала изучим несколько интересных приемов, которые сделают вашу графику более интерактивной, а также эстетичной. Для этого мы прежде всего узнаем о различных инструментах, которые использует библиотека Bokeh, кроме тех, которые отображаются рядом (либо сверху, либо справа) от графика. Пояснения будут даны в комментариях к коду ниже:
# Use the same plot data as above
x = [1, 2, 3, 4, 5, 6]
x_square = [i**2 for i in x]
x_cube = [i**3 for i in x]
#now let's make the necessary imports. Note that, in addition to the imports we made in the previous code, we'll be importing a few other things as well, which will be used to add more options in the 'toolset'.
# Same imports as before
from bokeh.plotting import figure, output_file, show
# New imports to add more interactivity in our figures
# Check out Bokeh's documentation for more tools (these are just two examples)
from bokeh.models import HoverTool, BoxSelectTool
output_file("Eqs.html")
# Add the tools to this list
tool_list = [HoverTool(), BoxSelectTool()]
# Use the tools keyword arg, otherwise the same
lines = figure(title='Line Comparisons', x_range=(0, 8), y_range=(0, 100),
x_axis_label='X-Axis', y_axis_label='Y-Axis', tools=tool_list)
# The rest of the code below is the same as above
lines.line(x, x, legend="y = x", line_width=3)
lines.square(x, x, legend="y = x", size=10)
lines.line(x, x_square, legend="y = x^2", line_width=3)
lines.circle(x, x_square, legend="y = x^2", size=10)
lines.line(x, x_cube, legend="y = x^3", line_width=3)
lines.square(x, x_cube, legend="y = x^2", size=10)
# Display the graph
show(lines)
Выход:
{.ezlazyload .img-responsive}
На картинке выше вы можете увидеть две дополнительные опции, добавленные к ранее доступным инструментам. Теперь вы также можете навести указатель мыши на любую точку данных, и будут показаны ее подробности, а также вы можете выбрать определенную группу точек данных, чтобы выделить их.
Обработка категориальных данных с помощью боке
Следующее, что мы научимся делать с помощью библиотеки Bokeh, - это обработка категориальных данных. Для этого мы сначала попробуем построить гистограмму. Чтобы было интересно, давайте попробуем создать диаграмму, которая представляет количество чемпионатов мира, выигранных Аргентиной, Бразилией, Испанией и Португалией. Звучит интересно? Давайте его закодируем.
from bokeh.io import show, output_file
from bokeh. plotting import figure
output_file("cups.html")
# List of teams to be included in the chart. Add or
# remove teams (and their World Cups won below) to
# see how it affects the chart
teams = ['Argentina', 'Brazil', 'Spain', 'Portugal']
# Activity: We experimented with the Hover Tool and the
# Box Select tool in the previous example, try to
# include those tools in this graph
# Number of world cups that the team has won
wc_won = [5, 3, 4, 2]
# Setting toolbar_location=None and tools="" essentially
# hides the toolbar from the graph
barchart = figure(x_range=teams, plot_height=250, title="WC Counts",
toolbar_location=None, tools="")
barchart.vbar(x=teams, top=wc_won, width=0.5)
# Acitivity: Play with the width variable and see what
# happens. In particular, try to set a value above 1 for
# it
barchart.xgrid.grid_line_color = 'red'
barchart.y_range.start = 0
show(barchart)
Выход:
{.ezlazyload .img-responsive}
Вы заметили что-то на графике выше? Это довольно просто и не впечатляет, не правда ли? Давайте внесем некоторые изменения в приведенный выше код и сделаем его более красочным и эстетичным. У Боке есть много вариантов, чтобы помочь нам в этом. Посмотрим, что мы можем с этим сделать:
# Mostly the same code as above, except with a few
# additions to add more color to our currently dry graph
from bokeh.io import show, output_file
from bokeh.plotting import figure
# New imports below
from bokeh.models import ColumnDataSource
# A was added 4 to the end of Spectral because we have 4
# teams. If you had more or less you would have used that
# number instead
from bokeh.palettes import Spectral4
from bokeh.transform import factor_cmap
output_file("cups.html")
teams = ['Argentina', 'Brazil', 'Spain', 'Portugal']
wc_won = [5, 3, 4, 2]
source = ColumnDataSource(data=dict(teams=teams, wc_won=wc_won, color=Spectral4))
barchart = figure(x_range=teams, y_range=(0,8), plot_height=250, title="World Cups Won",
toolbar_location=None, tools="")
barchart.vbar(x='teams', top='wc_won', width=0.5, color='color', legend='teams', source=source)
# Here we change the position of the legend in the graph
# Normally it is displayed as a vertical list on the top
# right. These settings change that to a horizontal list
# instead, and display it at the top center of the graph
barchart.legend.orientation = "horizontal"
barchart.legend.location = "top_center"
show(barchart)
Выход:
{.ezlazyload .img-responsive}
Очевидно, новый график выглядит намного лучше, чем раньше, с добавленной интерактивностью.
Прежде чем завершить эту статью, я хотел бы сообщить вам, что это всего лишь беглый взгляд на функциональность, которую предлагает Bokeh. Есть множество других интересных вещей, которые вы можете сделать с его помощью, и вы должны попробовать их, обратившись к документации Bokeh и следуя доступным примерам.
Хотя помимо документации есть много других замечательных ресурсов, например, « Визуализация данных в Python»{.ebook-link} . Здесь вы получите еще более подробное руководство по Bokeh, а также о 8 других библиотеках визуализации на Python.
Заключение
Подводя итог, в этом уроке мы узнали о варианте Python библиотеки Bokeh.
Мы увидели, как загрузить и установить его с помощью дистрибутива pip
или anaconda
Мы использовали программы библиотеки Bokeh для создания
интерактивных и динамических визуализаций разных типов, а также с
использованием разных типов данных. Мы также узнали, видя практические
примеры, причина , почему Bokeh необходима , хотя есть и другие более
популярные библиотеки визуализации , такие как
Matplotlib и
Сиборн
доступны. Короче говоря, Bokeh очень изобретательно и может в
значительной степени делать все виды интерактивных визуализаций, которые
вы можете захотеть.