Bokeh数字没有更新下降。安昌

2024-05-28 18:40:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我在更新博克图时有点问题。这是一段简单的代码,一个图形有一个曲线和一个下拉列表,可以改变时间段,7天,10天和30天。当我更改下拉列表值时,什么都不会发生。 我已经看过各种各样的文章了,但我没有找到明确的答案。 下面给出了代码示例。 谢谢

from bokeh.plotting import figure
from bokeh.layouts import row
from bokeh.io import curdoc
from bokeh.models import ColumnDataSource
from bokeh.models.widgets import Dropdown
from pandas_datareader import data
import datetime


TIME_PERIOD = 30

def get_data(period):
    today = datetime.date.today()
    timedelta = datetime.timedelta(days=period)
    start = today - timedelta
    df = data.DataReader(name="BTC-USD", data_source="yahoo", start=start)
    dates = df.loc[str(start):str(today)].index
    y = df["Volume"]
    data1 = dict(
        xaxis=dates,
        yaxis=y
    )
    source = ColumnDataSource(data1)
    return source


def update_date(attr, old, new):
    global TIME_PERIOD
    temp = new
    TIME_PERIOD = int(temp)


def get_plot(data_source):
    p = figure(title="Cryptocurrencies volumes", x_axis_label="Дни", y_axis_label="Volume 24hr",
               x_axis_type="datetime")
    p.line(x="xaxis", y="yaxis", color="green", source=data_source)
    return p

dropdown_menu = [("7","7"),("10","10"),("30","30")]
dropdown = Dropdown(label="Выбор временного интервала",button_type="success",menu=dropdown_menu, value="30")
dropdown.on_change("value", update_date)

data1 = get_data(TIME_PERIOD)
plot = get_plot(data1)

image = row(dropdown,plot)

curdoc().add_root(image)
curdoc().title = "Plot"

Tags: fromimportsourcedatagettodaydatetimetime
1条回答
网友
1楼 · 发布于 2024-05-28 18:40:41

仅仅设定你的时间是不够的。您必须再次调用get_data()函数,并将它返回的ColumnDataSource的数据设置为您的行glyph使用的ColumnDataSource的数据。在

from bokeh.plotting import figure
from bokeh.layouts import row
from bokeh.io import curdoc
from bokeh.models import ColumnDataSource
from bokeh.models.widgets import Dropdown
from pandas_datareader import data
import datetime

TIME_PERIOD = 30

def get_data(period):
    today = datetime.date.today()
    timedelta = datetime.timedelta(days=period)
    start = today - timedelta
    df = data.DataReader(name="BTC-USD", data_source="yahoo", start=start)
    dates = df.loc[str(start):str(today)].index
    y = df["Volume"]
    data1 = dict(
        xaxis=dates,
        yaxis=y
    )
    source = ColumnDataSource(data1)
    return source


def update_date(attr, old, new):
    TIME_PERIOD = int(new)
    newdata = get_data(TIME_PERIOD)
    source.data = newdata.data

dropdown_menu = [("7","7"),("10","10"),("30","30")]
dropdown = Dropdown(label="Выбор временного интервала",button_type="success",menu=dropdown_menu, value="30")
dropdown.on_change("value", update_date)

source = get_data(TIME_PERIOD)
p = figure(title="Cryptocurrencies volumes", x_axis_label="Дни", y_axis_label="Volume 24hr",
           x_axis_type="datetime")
p.line(x="xaxis", y="yaxis", color="green", source=source)

image = row(dropdown,p)

curdoc().add_root(image)
curdoc().title = "Plot"

相关问题 更多 >

    热门问题