Comment puis-je accomplir `set xlim` ou `set ylim` à Bokeh?

je crée une figure dans une fonction, par exemple

import numpy
from bokeh.plotting import figure, show, output_notebook
output_notebook()

def make_fig():
    rows = cols = 16
    img = numpy.ones((rows, cols), dtype=numpy.uint32)
    view = img.view(dtype=numpy.uint8).reshape((rows, cols, 4))
    view[:, :, 0] = numpy.arange(256)
    view[:, :, 1] = 265 - numpy.arange(256)
    fig = figure(x_range=[0, c], y_range=[0, rows])
    fig.image_rgba(image=[img], x=[0], y=[0], dw=[cols], dh=[rows])
    return fig

plus tard je veux zoomer sur la figure:

fig = make_fig()
# <- zoom in on plot, like `set_xlim` from matplotlib
show(fig)

Comment faire un zoom programmatique à bokeh?

25
demandé sur Brian 2015-03-27 09:55:00

3 réponses

Une façon est à peut de choses avec un simple tuple lors de la création d'une figure:

figure(..., x_range=(left, right), y_range=(bottom, top))

mais vous pouvez aussi définir le x_range et y_range propriétés d'une figure directement. (J'avais été à la recherche de quelque chose comme set_xlim ou set_ylim from matplotlib.)

from bokeh.models import Range1d

fig = make_fig()
left, right, bottom, top = 3, 9, 4, 10
fig.x_range=Range1d(left, right)
fig.y_range=Range1d(bottom, top)
show(fig)
26
répondu Brian 2018-02-14 18:21:24

peut-être une solution naïve, mais pourquoi ne pas passer l'axe lim comme argument de votre fonction?

import numpy
from bokeh.plotting import figure, show, output_notebook
output_notebook()

def make_fig(rows=16, cols=16,x_range=[0, 16], y_range=[0, 16], plot_width=500, plot_height=500):
    img = numpy.ones((rows, cols), dtype=numpy.uint32)
    view = img.view(dtype=numpy.uint8).reshape((rows, cols, 4))
    view[:, :, 0] = numpy.arange(256)
    view[:, :, 1] = 265 - numpy.arange(256)
    fig = figure(x_range=x_range, y_range=y_range, plot_width=plot_width, plot_height=plot_height)
    fig.image_rgba(image=[img], x=[0], y=[0], dw=[cols], dh=[rows])
    return fig
2
répondu SeF 2017-06-22 08:17:39

vous pouvez également l'utiliser directement

p = Histogram(wind , xlabel= 'meters/sec', ylabel = 'Density',bins=12,x_range=Range1d(2, 16)) show(p)

0
répondu sushmit 2016-08-16 03:50:46