Bokeh - eixos

Neste capítulo, discutiremos sobre vários tipos de eixos.

Sr. Não Machados Descrição
1 Eixos Categóricos Os gráficos de bokeh mostram dados numéricos ao longo dos eixos x e y. Para usar dados categóricos ao longo de qualquer um dos eixos, precisamos especificar um FactorRange para especificar dimensões categóricas para um deles.
2 Eixos de escala de registro Se houver uma relação de lei de potência entre as séries de dados xey, é desejável usar escalas logarítmicas em ambos os eixos.
3 Machados duplos Pode ser necessário mostrar vários eixos que representam faixas variadas em uma única figura de gráfico. O objeto de figura pode ser configurado definindoextra_x_range e extra_y_range propriedades

Eixos Categóricos

Nos exemplos até agora, os gráficos Bokeh mostram dados numéricos ao longo dos eixos xe y. Para usar dados categóricos ao longo de qualquer um dos eixos, precisamos especificar um FactorRange para especificar dimensões categóricas para um deles. Por exemplo, para usar strings na lista fornecida para o eixo x -

langs = ['C', 'C++', 'Java', 'Python', 'PHP']
fig = figure(x_range = langs, plot_width = 300, plot_height = 300)

Exemplo

Com o exemplo a seguir, um gráfico de barra simples é exibido mostrando o número de alunos matriculados em vários cursos oferecidos.

from bokeh.plotting import figure, output_file, show
langs = ['C', 'C++', 'Java', 'Python', 'PHP']
students = [23,17,35,29,12]
fig = figure(x_range = langs, plot_width = 300, plot_height = 300)
fig.vbar(x = langs, top = students, width = 0.5)
show(fig)

Resultado

Para mostrar cada barra em cores diferentes, defina a propriedade de cor da função vbar () para a lista de valores de cor.

cols = ['red','green','orange','navy', 'cyan']
fig.vbar(x = langs, top = students, color = cols,width=0.5)

Resultado

Para renderizar uma barra empilhada vertical (ou horizontal) usando a função vbar_stack () ou hbar_stack (), defina stackers property para lista de campos para empilhar sucessivamente e source property para um objeto dict contendo valores correspondentes a cada campo.

No exemplo a seguir, vendas é um dicionário que mostra os números das vendas de três produtos em três meses.

from bokeh.plotting import figure, output_file, show
products = ['computer','mobile','printer']
months = ['Jan','Feb','Mar']
sales = {'products':products,
   'Jan':[10,40,5],
   'Feb':[8,45,10],
   'Mar':[25,60,22]}
cols = ['red','green','blue']#,'navy', 'cyan']
fig = figure(x_range = products, plot_width = 300, plot_height = 300)
fig.vbar_stack(months, x = 'products', source = sales, color = cols,width = 0.5)
show(fig)

Resultado

Um gráfico de barras agrupadas é obtido especificando um deslocamento visual para as barras com a ajuda da função dodge () em bokeh.transform módulo.

o dodge() functionintroduz um deslocamento relativo para cada gráfico de barra, obtendo assim uma impressão visual do grupo. No exemplo a seguir,vbar() glyph é separado por um deslocamento de 0,25 para cada grupo de barras de um determinado mês.

from bokeh.plotting import figure, output_file, show
from bokeh.transform import dodge
products = ['computer','mobile','printer']
months = ['Jan','Feb','Mar']
sales = {'products':products,
   'Jan':[10,40,5],
   'Feb':[8,45,10],
   'Mar':[25,60,22]}
fig = figure(x_range = products, plot_width = 300, plot_height = 300)
fig.vbar(x = dodge('products', -0.25, range = fig.x_range), top = 'Jan',
   width = 0.2,source = sales, color = "red")
fig.vbar(x = dodge('products', 0.0, range = fig.x_range), top = 'Feb',
   width = 0.2, source = sales,color = "green")
fig.vbar(x = dodge('products', 0.25, range = fig.x_range), top = 'Mar',
   width = 0.2,source = sales,color = "blue")
show(fig)

Resultado

Eixos de escala de registro

Quando os valores em um dos eixos de um gráfico crescem exponencialmente com o aumento linear dos valores de outro, geralmente é necessário que os dados do eixo anterior sejam exibidos em uma escala logarítmica. Por exemplo, se existe uma relação de lei de potência entre as séries de dados xey, é desejável usar escalas logarítmicas em ambos os eixos.

A função figure () da API Bokeh.plotting aceita x_axis_type e y_axis_type como argumentos que podem ser especificados como eixo log, passando "log" para o valor de qualquer um desses parâmetros.

A primeira figura mostra o gráfico entre x e 10x em uma escala linear. Na segunda figura y_axis_type é definido como 'log'

from bokeh.plotting import figure, output_file, show
x = [0.1, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0]
y = [10**i for i in x]
fig = figure(title = 'Linear scale example',plot_width = 400, plot_height = 400)
fig.line(x, y, line_width = 2)
show(fig)

Resultado

Agora mude a função figure () para configurar y_axis_type = 'log'

fig = figure(title = 'Linear scale example',plot_width = 400, plot_height = 400, y_axis_type = "log")

Resultado

Machados duplos

Em certas situações, pode ser necessário mostrar vários eixos que representam intervalos variados em uma única figura de gráfico. O objeto de figura pode ser configurado definindoextra_x_range e extra_y_rangepropriedades. Ao adicionar um novo glifo à figura, esses intervalos nomeados são usados.

Tentamos exibir uma curva seno e uma linha reta no mesmo gráfico. Ambos os glifos têm eixos y com intervalos diferentes. As séries de dados xey para a curva senoidal e reta são obtidas pelo seguinte -

from numpy import pi, arange, sin, linspace
x = arange(-2*pi, 2*pi, 0.1)
y = sin(x)
y2 = linspace(0, 100, len(y))

Aqui, o gráfico entre x e y representa a relação seno e o gráfico entre x e y2 é uma linha reta. O objeto Figura é definido com y_range explícito e um glifo de linha que representa a curva senoidal é adicionado da seguinte forma -

fig = figure(title = 'Twin Axis Example', y_range = (-1.1, 1.1))
fig.line(x, y, color = "red")

Precisamos de um alcance extra y. É definido como -

fig.extra_y_ranges = {"y2": Range1d(start = 0, end = 100)}

Para adicionar eixo y adicional no lado direito, use o método add_layout (). Adicione um novo glifo de linha representando x e y2 à figura.

fig.add_layout(LinearAxis(y_range_name = "y2"), 'right')
fig.line(x, y2, color = "blue", y_range_name = "y2")

Isso resultará em um gráfico com eixos y gêmeos. O código completo e a saída são os seguintes -

from numpy import pi, arange, sin, linspace
x = arange(-2*pi, 2*pi, 0.1)
y = sin(x)
y2 = linspace(0, 100, len(y))
from bokeh.plotting import output_file, figure, show
from bokeh.models import LinearAxis, Range1d
fig = figure(title='Twin Axis Example', y_range = (-1.1, 1.1))
fig.line(x, y, color = "red")
fig.extra_y_ranges = {"y2": Range1d(start = 0, end = 100)}
fig.add_layout(LinearAxis(y_range_name = "y2"), 'right')
fig.line(x, y2, color = "blue", y_range_name = "y2")
show(fig)

Resultado