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

使用散景绘制堆积条形图

使用散景绘制堆积条形图

梦里花落0921 2023-08-08 15:39:36
我正在尝试按照文档的这一部分使用散景绘制堆积条形图。但我的数据框有点复杂。它看起来像这样: mount has the following return codes (the bits can be ORed):   0      success   1      incorrect invocation or permissions   2      system error (out of memory, cannot fork, no more loop devices)   4      internal mount bug   8      user interrupt   16     problems writing or locking /etc/mtab   32     mount failure   64     some mount succeeded   The command mount -a returns 0 (all succeeded), 32 (all failed), or 64 (some failed,  some   succeeded).
查看完整描述

1 回答

?
精慕HU

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

bokeh 不一定需要字典才能工作,因此我们实际上可以使用pivotDataframe 方法来实现所需的转换并直接绘制结果。


>>> df = pd.DataFrame({

    'events': ['a', 'b', 'a', 'c', 'b', 'c'],

    'count': [2, 1, 8, 1, 4, 1],

    'Name': ['jerry', 'jerry', 'joe', 'joe', 'megan', 'megan']})


>>> df

  events  count   Name

0  a      2      jerry

1  b      1      jerry

2  a      8      joe  

3  c      1      joe  

4  b      4      megan

5  c      1      megan

转换数据:


>>> df2 = df.pivot(index="Name", columns="events", values="count").fillna(0)

>>> df2

events  a   b   c

Name            

jerry   2.0 1.0 0.0

joe     8.0 0.0 1.0

megan   0.0 4.0 1.0

绘制数据:


from bokeh.plotting import figure

from bokeh.palettes import viridis


names = df2.index.tolist()

events = df2.columns.tolist()

color = viridis(len(events))


p = figure(x_range=names)

p.vbar_stack(events, x="Name", source=df2, width=.9, color=color), legend_label=events)

show(p)

https://img1.sycdn.imooc.com//64d1f1b10001800f03190316.jpg

绘制此图的另一种方法是使用 Holoviews 库(只需添加此库,因为 Holoviews 可以生成一些比 Bokeh 更简洁的代码)。Holoviews 会为您处理数据转换,因此您不需要任何额外的工作:


import holoviews as hv

hv.extension("bokeh")


hv.Bars(df, kdims=["Name", "events"], vdims="count").opts(stacked=True)

https://img1.sycdn.imooc.com//64d1f1bf0001071104090373.jpg

至于替代解决方案,我并不完全确定。我认为与 167 种类型的事件进行视觉比较并不容易(即 167 种独特的颜色,因此这些颜色可能不是非常容易辨别 - 更不用说具有 167 个条目的笨拙图例)。如果这种可视化方式没有帮助,我建议使用 Holoviews 库为您的每个名字创建一个条形图。然后,您可以切换数据中每个人的绘图。

import holoviews as hv
hv.extension("bokeh")

hv.Bars(df, kdims=["Name", "events"], vdims="count").groupby("Name")

https://img1.sycdn.imooc.com//64d1f1d10001082309810366.jpg

查看完整回答
反对 回复 2023-08-08
  • 1 回答
  • 0 关注
  • 57 浏览
慕课专栏
更多

添加回答

举报

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