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)