为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

小唯快跑啊 2023-10-31 14:04:04
我面临这个问题,因为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  id0   APPLE   N   21   APPLE   Y   12   BALL    N   13   BALL    Y   14   CAT     N   15   CAT     Y   16   DOG     Y   1我希望我的图像的顺序与此相同dfdef 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)我得到了结果图像:-我不希望这样,我希望顺序与我的数据帧的顺序相同:- APPLE- N,,Y然后 BALL N,Y..(从上到下)。依此类推。我也不想要对要排序的变量进行编码,因为我有一个很大的变量,df有很多sets,并且很难在代码中给出要排序的变量名称,而且如果我要创建一个function
查看完整描述

2 回答

?
湖上湖

TA贡献2003条经验 获得超2个赞

如果你想对外部索引进行排序,你可以.sort(dimension, reverse=True)在你的hv.Bars对象上使用。但是,对内部索引进行排序将需要您显式设置维度值:


from bokeh.io import show

import holoviews as hv

hv.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)

生产:

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

查看完整回答
反对 回复 2023-10-31
?
守着星空守着你

TA贡献1799条经验 获得超8个赞

作为快速修复/解决方法,我已将索引反转为按 的顺序出现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)



查看完整回答
反对 回复 2023-10-31
  • 2 回答
  • 0 关注
  • 78 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信