我有一个vbar_stack图表,正在使用CheckboxGroup选择进行更新。当我更改所选帐户时,数据确实会更改,但图表不会重新排序。如何使帐户按降序重新排序?
现在,我将此代码用于CheckboxGroup onchange命令。 custom_make_dataset函数会对已过滤的数据集进行重新排序。
def custom_make_dataset(df, accounts):
remove_accounts = [i for i in df["acc"].unique() if i not in accounts]
new_df = df \
.groupby(["acc","product"])["cost"] \
.sum() \
.reset_index() \
.pivot(columns="acc", index="product", values="cost") \
for account in remove_accounts:
new_df[account] = 0
new_df["Total"] = new_df.sum(axis=1)
new_df.sort_values(by="Total", ascending=False, inplace=True)
del new_df["Total"]
return ColumnDataSource(new_df)
def update_checkbox(attr, old, new):
accounts_to_plot = [account_selection.labels[i] for i in account_selection.active]
new_src = custom_make_dataset(df,accounts_to_plot)
source.data.update(new_src.data)
account_selection = CheckboxGroup(name="Customer Accounts", labels=initial_accounts, active = [i for i,j in enumerate(initial_accounts)])
account_selection.on_change('active', update_checkbox)
答案 0 :(得分:1)
我发现了问题所在。在更新数据时,我并没有更新x轴本身。您可以在onchange命令中添加类似内容,以更新绘图x轴。
p.x_range.factors =(new_src.data ['产品'])
答案 1 :(得分:0)
也许bokeh是使用数据框索引来确定值放置在哪个x位置上。
在返回新的new_df
之前,请尝试重设ColumnDataSource
索引。
new_df.reset_index(drop=True, inplace=True)