散景vbar_stack条在过滤数据源后不会重新排序

时间:2018-11-14 00:12:33

标签: python widget bokeh

我有一个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)

Full Selection After 1 Account Selection

2 个答案:

答案 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)