蟒蛇散景范围在更新时不会改变



我正在使用散景来生成股票数据,用户可以选择股票代码名称和开始/结束日期来生成图表。但是,在选择某些股票时,y 轴会失真(请参阅我之前的问题:输入某些股票时散景图会扭曲(。

我试图通过在选择时手动将 y 范围设置为股票的最小值和最大值来缓解这种情况,但是,新范围不会更新,y 轴也不会更改。如何解决此问题?任何建议将不胜感激。

p=figure(
    height=400,
    x_axis_type='datetime',
    title=(company+' ('+tickerstring+') '),
    tools='pan, box_zoom, wheel_zoom, reset',
)

x = np.array(sandpdates, dtype=np.datetime64)
y=sandpclose
r=p.line(x, y)
p.grid.grid_line_color="white"
p.xaxis.axis_label = 'Date'
p.yaxis.axis_label = 'Price'
p.add_tools(HoverTool(
    tooltips=[
        ("Date", "@x{%F}"),
        ('Close',"@y")
    ],
    formatters={
        'x':'datetime', # use 'datetime' formatter for 'date' field
    },
    mode='vline'
))

def update(f, startyear=2015, startmonth=1, startday=1, endyear=current_year, endmonth=current_month, endday=current_day):
    fstocksymbol=str(f.upper())
    starts=dt.datetime(startyear,startmonth,startday)
    end = dt.datetime(endyear,endmonth,endday)
    if int(startyear)> int(endyear):
        print('Please ensure the starting date does not exceed the end date')
    elif int(startyear)==int(endyear):
        if startmonth>endmonth:
            print('Please ensure the starting date does not exceed the end date')
        elif startmonth==endmonth:
            if startday>endday:
                print('Please ensure the starting date does not exceed the end date')
    else:
        print('')
    if fstocksymbol in stocksymbols:
        p.title.text = (symbolsdictionary[fstocksymbol]).upper()+' ('+fstocksymbol+')'
        tickerstring=fstocksymbol
        firstfunction=stockname(tickerstring, starts, end)
        secondfunction=stockdata(firstfunction)
        stockdates=[]
        stockcloseprices=[]
        for value in secondfunction:
            stockdates.append(value[0])
            stockcloseprices.append(float(value[4]))
        finaldate=np.array(stockdates, dtype=np.datetime64)
        p.y_range = Range1d(min(stockcloseprices), max(stockcloseprices))
        r.data_source.data['x'] = finaldate
        r.data_source.data['y'] = stockcloseprices
        push_notebook()
    elif fstocksymbol=='':
        print('')
    else:
        print("")
interact(update, f=stocksymbols, startyear=list(range(int(current_year-5),int(current_year+1))), startmonth=list(range(1,13)), startday=list(range(1,32)), 
         endyear=list(range(int(current_year-5),int(current_year+1))), endmonth=list(range(1,13)), endday=list(range(1,32)))
grid = gridplot([p, b], ncols=2, plot_width=570, plot_height=400)
show(grid, notebook_handle=True)

而不是直接使用新的 Range1D 分配给范围的开始和结束属性:

p.y_range.start = min(stockcloseprices)
p.y_range.end = max(stockcloseprices)

还可以尝试为数据分配一个新的 ColumnDataSource((,而不是直接在其中分配类似以下内容的内容:

r.data_source.data = dict(x=finaldate, y=stockcloseprices)

我相信散景仅在包含开始、结束和数据在内的情节的某些属性上检测事件。

最新更新