[Python] Is it possible to keep the same amount of x axis tick labels visible as the zoom...

Discussão em 'Python' iniciado por Stack, Setembro 26, 2024.

  1. Stack

    Stack Membro Participativo

    I'm using Django and generating a bokeh bar plot using data from a database. I've put a basic code example below. I'm generating x axis tick labels from a datetime variable to get a tick at every hour with a datetime formatted string. This causes all the tick label to be visible all the time. It's fine when zoomed in but not pretty when zoomed out because the labels are on top of each other.

    Is there a way to make bokeh automatically adjust which tick labels are visible as the zoom level changes to keep a constant amount of ticks labels visible ?

    views.py :

    # -*- coding: utf-8 -*-
    from django.shortcuts import render

    from bokeh.plotting import *
    from bokeh.resources import CDN
    from bokeh.embed import components
    from bokeh.charts import Bar
    from bokeh.models import Range1d

    from collections import OrderedDict
    import datetime

    def plot_1_bar(data, y, y_lab, title, xlab, ylab, yrange, palette):
    x0_list_str = []

    y_list = []

    # x_axis_type == "datetime":
    i_x = 'x1'
    i_y = y[0]
    for idx, val in enumerate(data):
    x0_list_str.append(val[i_x].strftime("%Y-%m-%d %H h"))
    y_list.append(val[i_y])

    data_x = x0_list_str
    data_y = OrderedDict()
    data_y[y_lab[0]] = y_list

    plot = Bar(data_y, data_x, title=title, xlabel=xlab,
    ylabel=ylab, stacked=True, continuous_range=yrange,
    palette=palette, legend=True, height=400)
    return components(plot, CDN)

    def plot1(request):

    script_bokeh = ""
    div_bokeh = ""

    data = []
    data.append({'x1': datetime.datetime(2015,1,1,8,0,0,0),'y1': 0})
    data.append({'x1': datetime.datetime(2015,1,1,9,0,0,0),'y1': 0})
    data.append({'x1': datetime.datetime(2015,1,1,10,0,0,0),'y1': 0})
    data.append({'x1': datetime.datetime(2015,1,1,11,0,0,0),'y1': 0})
    data.append({'x1': datetime.datetime(2015,1,1,12,0,0,0),'y1':8})
    data.append({'x1': datetime.datetime(2015,1,1,13,0,0,0),'y1':12})
    data.append({'x1': datetime.datetime(2015,1,1,14,0,0,0),'y1':0})
    data.append({'x1': datetime.datetime(2015,1,1,15,0,0,0),'y1':0})
    data.append({'x1': datetime.datetime(2015,1,1,16,0,0,0),'y1':0})
    data.append({'x1': datetime.datetime(2015,1,1,17,0,0,0),'y1':0})
    data.append({'x1': datetime.datetime(2015,1,1,18,0,0,0),'y1':2})
    data.append({'x1': datetime.datetime(2015,1,1,19,0,0,0),'y1':6})
    data.append({'x1': datetime.datetime(2015,1,1,20,0,0,0),'y1':4})
    data.append({'x1': datetime.datetime(2015,1,1,21,0,0,0),'y1':22})
    data.append({'x1': datetime.datetime(2015,1,1,22,0,0,0),'y1':36})
    data.append({'x1': datetime.datetime(2015,1,1,23,0,0,0),'y1':32})
    data.append({'x1': datetime.datetime(2015,1,2,0,0,0,0),'y1':21})
    data.append({'x1': datetime.datetime(2015,1,2,1,0,0,0),'y1':15})
    data.append({'x1': datetime.datetime(2015,1,2,2,0,0,0),'y1':4})
    data.append({'x1': datetime.datetime(2015,1,2,3,0,0,0),'y1':0})
    data.append({'x1': datetime.datetime(2015,1,2,4,0,0,0),'y1':0})
    data.append({'x1': datetime.datetime(2015,1,2,5,0,0,0),'y1':0})
    data.append({'x1': datetime.datetime(2015,1,2,6,0,0,0),'y1':45})
    data.append({'x1': datetime.datetime(2015,1,2,7,0,0,0),'y1':47})
    data.append({'x1': datetime.datetime(2015,1,2,8,0,0,0),'y1':52})
    data.append({'x1': datetime.datetime(2015,1,2,9,0,0,0),'y1':44})
    data.append({'x1': datetime.datetime(2015,1,2,10,0,0,0),'y1':0})
    data.append({'x1': datetime.datetime(2015,1,2,11,0,0,0),'y1':0})
    data.append({'x1': datetime.datetime(2015,1,2,12,0,0,0),'y1':0})
    data.append({'x1': datetime.datetime(2015,1,2,13,0,0,0),'y1':0})

    script_bokeh, div_bokeh = plot_1_bar(data,
    ['y1'],
    ['y legend label'],
    "",
    'x label',
    'y label',
    Range1d(0, 70),
    ['red'])

    return render(request,
    'tests/plot1.html',
    {'script_bokeh': script_bokeh,
    'div_bokeh': div_bokeh})


    plot1.html :

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <title>bokeh bar plot</title>
    <link rel="stylesheet" type="text/css" href="/static/tests/css/bokeh-0.9.2.min.css" />
    <script src="/static/tests/js/bokeh-0.9.2.min.js" type="text/javascript"></script>
    </head>
    <body>
    <h1>Bokeh bar plot</h1>
    <div id="div_graph">{{div_bokeh|safe}}{{script_bokeh|safe}}</div>
    </body>
    </html>


    [​IMG]

    [​IMG]

    Continue reading...

Compartilhe esta Página