Python 根据Bokeh中的x_范围自动设置vbar线宽

Python 根据Bokeh中的x_范围自动设置vbar线宽,python,graph,bokeh,Python,Graph,Bokeh,我有一个vbar绑定到一个ColumnDataSource,它会根据一些小部件选择进行更新。如果我从线宽=5开始,我的初始数据看起来很棒。但是,当我更新图形时,x_范围会更新以适应更新的数据,并导致条的相对宽度发生变化 理想情况下,宽度应始终与显示的条数成比例。我试着查看x_范围和xaxis上的各种属性,看看是否可以获得范围并尝试自己计算宽度,但我没有找到任何有用的方法。我一直在到处找文件,什么都没有。有什么想法吗?在@bigreddot的帮助下,我终于找到了答案。结果证明我用错了房子。我需要使

我有一个
vbar
绑定到一个
ColumnDataSource
,它会根据一些小部件选择进行更新。如果我从
线宽=5开始,我的初始数据看起来很棒。但是,当我更新图形时,
x_范围
会更新以适应更新的数据,并导致条的相对宽度发生变化


理想情况下,宽度应始终与显示的条数成比例。我试着查看
x_范围
xaxis
上的各种属性,看看是否可以获得范围并尝试自己计算宽度,但我没有找到任何有用的方法。我一直在到处找文件,什么都没有。有什么想法吗?

在@bigreddot的帮助下,我终于找到了答案。结果证明我用错了房子。我需要使用
宽度,而不是
线宽。由于我的
x_范围
是一个
datetime
范围,并且
datetime
以毫秒为单位,因此我需要足够大的宽度才能正确显示。这需要在放大时设置比例宽度,因为宽度表示
x_轴上的特定时段

由于我有一个函数可以更改列分组方式的
频率
,并更新
ColumnDataSource.data
,因此在更新时只需重新计算
宽度

以下是工作代码:

def get_data(freq='MS'):
返回pd.DataFrame(srs.groupby(pd.Grouper(freq=freq)).mean()
source=ColumnDataSource(data=ColumnDataSource.from_df(get_data()))
def get_width():
mindate=min(source.data['date']))
maxdate=max(source.data['date']))
返回0.8*(maxdate mindate).total_seconds()*1000/len(source.data['date'])
f=图形(绘图宽度=550,绘图高度=400,x轴类型=“日期时间”)
f、 x_range.set(bounds='auto')
r=f.vbar(source=source,top='volume',x='date',width=get_width())
条形图glyph=f.renderers[-1]。glyph
handle=show(f,notebook\u handle=True)
和我的更新功能:

def update_data(freq={'Quarter': 'QS', 'Month': 'MS', 'Week': 'W'}):
    source.data = ColumnDataSource.from_df(get_data(freq))
    r.glyph.width = get_width()
    push_notebook()

i = interact(update_data)