Bokeh, combinaison de bar et de graphique linéaire

j'essaie de tracer une ligne au sommet d'un diagramme à barres à l'intérieur de bokeh. J'ai essayé:

p1 = figure()...

p1.renderer.append(Bar(...))
p1.renderer.append(Line(...))

show(p1)

jusqu'à présent, je n'ai pas eu de chance.

2
demandé sur Opal 2015-06-04 15:20:39

2 réponses

la combinaison de deux ou plusieurs graphiques dans une parcelle de Bokeh est possible en utilisant le glyphes de base .

pour votre question, nous pouvons utiliser line et rect.

from bokeh.plotting import figure, output_file, show
from bokeh.models.ranges import Range1d
import numpy


output_file("line_bar.html")

p = figure(plot_width=400, plot_height=400)

# add a line renderer
p.line([1, 2, 3, 4, 5], [6, 7, 6, 4, 5], line_width=2)

# setting bar values
h = numpy.array([2, 8, 5, 10, 7])

# Correcting the bottom position of the bars to be on the 0 line.
adj_h = h/2

# add bar renderer
p.rect(x=[1, 2, 3, 4, 5], y=adj_h, width=0.4, height=h, color="#CAB2D6")

# Setting the y  axis range   
p.y_range = Range1d(0, 12)

p.title = "Line and Bar"

show(p)

Et l'intrigue nous obtenons:

enter image description here

6
répondu tomaskazemekas 2015-06-18 14:55:56

Piggybacking sur @tomaskazemekas: bien qu'il soit probablement préférable d'éviter de mélanger le pointage et les niveaux de carte à L'intérieur de Bokeh, il est possible de modifier un objet de carte de haut niveau en utilisant add_glyph :

from bokeh.charts import Bar, output_file, show
from bokeh.models.ranges import Range1d

from bokeh.models import ColumnDataSource
from bokeh.models.glyphs import Line as Line_glyph

import numpy as np

# create dummy data
df = dict(
    x=[1, 2, 3, 4, 5],
    y=[6, 7, 6, 4, 5],
    h=[2, 8, 5, 10, 7]
)

# create high-level bar chart
p = Bar(data=df, label='x', values='h', color='dodgerblue', title="Bar and Line Plot",
        legend=False, plot_width=400, plot_height=400)

# create source data object from data
source = ColumnDataSource(data=df)

# create a line glyph object which references columns from source data
glyph = Line_glyph(x='x', y='y', line_color='grey', line_width=2)

# add the glyph to the chart
p.add_glyph(source, glyph)

# Setting the y  axis range   
p.y_range = Range1d(0, 12)

output_file("line_bar.html")

show(p)

donne un résultat similaire: Bar de Ligne et d'Intrigue

4
répondu Matthew Davis 2016-08-16 00:01:59