如何根据 Holoviews 中数据帧的顺序/索引设置条形的顺序

我面临这个问题,因为HOLOVIEWS我无法按照我的df. 我也尝试过很多方法order但sort都失败了。显示的图像与预期的顺序完全相反。


df = pd.DataFrame({

    "set": list("ABABCCAD"),

    "flag": list("YYNNNYNY"),

    "id": list("DEFGHIJK"),

})

df["set"] = df["set"].map(

    {"A": "APPLE",

     "B": "BALL",

     "C": "CAT",

     "D": "DOG"

    }

)

这是结果df:-


    set   flag  id

0   APPLE   N   2

1   APPLE   Y   1

2   BALL    N   1

3   BALL    Y   1

4   CAT     N   1

5   CAT     Y   1

6   DOG     Y   1

我希望我的图像的顺序与此相同df


def hook1(plot, element):

    plot.state.y_range.range_padding = 0.1


   

plot.state.text(

    y="xoffsets",

    x="id",

    text="id",

    source=plot.handles["source"],

    text_align="left",

    y_offset=10,

    x_offset=5    

)


df= df.groupby(["set", "flag"])["id"].count().reset_index()

count_bars = hv.Bars(df, kdims=["set","flag"], vdims="id")



plot = (

count_bars.opts(hooks=[hook1],

title="IDs",invert_axes=True, width=500, padding=2))

bokeh_obj = hv.render(plot, backend="bokeh")

show(bokeh_obj)

我得到了结果图像:-

https://img1.sycdn.imooc.com/654098e900019f5b06480388.jpg

我不希望这样,我希望顺序与我的数据帧的顺序相同:- APPLEN,,Y然后 BALL NY..(从上到下)。依此类推。我也不想要对要排序的变量进行编码,因为我有一个很大的变量,df有很多sets,并且很难在代码中给出要排序的变量名称,而且如果我要创建一个function



小唯快跑啊
浏览 151回答 2
2回答

湖上湖

如果你想对外部索引进行排序,你可以.sort(dimension, reverse=True)在你的hv.Bars对象上使用。但是,对内部索引进行排序将需要您显式设置维度值:from bokeh.io import showimport holoviews as hvhv.extension("bokeh")df = df.groupby(["set", "flag"])["id"].count().reset_index()count_bars = hv.Bars(df, kdims=["set","flag"], vdims="id")plot = (count_bars        .opts(hooks=[hook1], title="IDs",invert_axes=True, width=500, padding=2)        .redim.values(flag=["Y", "N"]) # Inverting the axes flips this order. This produces N, Y vertically        .sort("set", reverse=True)       )bokeh_obj = hv.render(plot, backend="bokeh")show(bokeh_obj)生产:

守着星空守着你

作为快速修复/解决方法,我已将索引反转为按 的顺序出现df,但我认为这应该在holoviews将来修复    df['indexn'] = df.index    df.indexn = df.indexn.values[::-1]    order = df.sort_values(by='indexn').set    order1 = df.sort_values(by='indexn').flag    count_bars = hv.Bars(df, kdims=["set","flag"], vdims="id").redim.values(set=order,flag=order1)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python