你如何使用散景服务器更新bokeh.plotting.figure.y_axis

问题描述 投票:0回答:2

- 在我能够复制问题并理解它之后更新了。

当我为Bokeh服务器设置我的图时,我在y_range上添加25,所以我在顶部有一些标签填充。

plot = figure(x_range=chart_data_source.data['we'],
    plot_height=250,
plot.y_range.end = max(chart_data_source.data['total']+25)

稍后,在通过回调更新数据源之后,我想重新设置y_range。以下行位于我的更新函数中,由任何多选小部件中的更改调用。关于我的身材的其他一切都变得很好,但是y_range没有。我尝试更新y_range:

plot.y_range.end = max(chart_data_source.data['total'] + 25)

它不会更新y_range。知道如何更新散景服务器中的y_range吗? Bokeh服务器版本1.0.4

bokeh
2个回答
0
投票

Range1d是一个对象,具有startend属性,这些是你可以更新的。将一个数字指定为整个范围没有意义。

plot.y_range.end = max(chart_data_source.data['total'] + 25)

您看到的错误消息是由于其他原因,但如果没有更多代码,则无法进行推测。


0
投票

我弄清楚为什么我的y_range没有被更新。如果我独立设置y_range.max,那么我以后就不能在update()函数中“重新设置”它。但是如果我在声明图形时设置,那么我可以更新update()函数中的值。这是Bokeh的预期行为吗?

import pandas as pd
import numpy as np
from bokeh.io import curdoc
from bokeh.layouts import layout
from bokeh.plotting import figure
from bokeh.models import ColumnDataSource
from bokeh.models.widgets import Button


def populate_table_source(df):
    ds = {}
    for col in list(df):
        ds[col] = df[col]
    return ds


colors = ["#c9d9d3", "#718dbf", "#e84d60"]
years = ['2015', '2016', '2017']
data = {'fruits': ['Apples', 'Pears', 'Nectarines', 'Plums', 'Grapes', 'Strawberries'],
        '2015': [2, 1, 4, 3, 2, 4],
        '2016': [5, 3, 4, 2, 4, 6],
        '2017': [3, 2, 4, 4, 5, 3]}
df_chart = pd.DataFrame(data)
df_chart['total'] = df_chart[years].sum(axis=1)

print(df_chart)
chart_data_source = ColumnDataSource(data={})
chart_data_source.data = populate_table_source(df_chart)

years = ['2015', '2016', '2017']
# set up widgets
button = Button(label="Update", button_type="success")


p = figure(x_range=chart_data_source.data['fruits'],
           plot_height=250,
           plot_width=1000,
           title="Fruit Counts by Year",
           tools="hover,save",
           tooltips="$name: @$name",
           y_range=(0, 10) # can be updated if you assign it here
           )
p.vbar_stack(years,
             x='fruits',
             width=0.9,
             color=colors,
             source=chart_data_source,
             )

# p.y_range.start = 0
# p.y_range.end = 10 # can't be udpated if you assign it here

def update_data():
    data = {'fruits': ['Apples', 'Pears', 'Nectarines', 'Plums', 'Grapes', 'Strawberries'],
            '2015': [np.random.randint(5), np.random.randint(5), np.random.randint(5), np.random.randint(5),
                     np.random.randint(5), np.random.randint(5)],
            '2016': [np.random.randint(5), np.random.randint(5), np.random.randint(5), np.random.randint(5),
                     np.random.randint(5), np.random.randint(5)],
            '2017': [np.random.randint(5), np.random.randint(5), np.random.randint(5), np.random.randint(5),
                     np.random.randint(5), np.random.randint(5)],
            }
    df_chart = pd.DataFrame(data)
    df_chart['total'] = df_chart[years].sum(axis=1)
    chart_data_source.data = populate_table_source(df_chart)
    old_y_range = p.y_range.end
    p.y_range.end = old_y_range + 2


# Set up layout
button.on_click(update_data)
lo = layout(button, p)

curdoc().add_root(lo)
curdoc().title = "MVE"
© www.soinside.com 2019 - 2024. All rights reserved.