使用散景绘制堆积条形图

我正在尝试按照文档的这一部分使用散景绘制堆积条形图。但我的数据框有点复杂。它看起来像这样:


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


梦里花落0921
浏览 59回答 1
1回答

精慕HU

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   Name0  a      2      jerry1  b      1      jerry2  a      8      joe  3  c      1      joe  4  b      4      megan5  c      1      megan转换数据:>>> df2 = df.pivot(index="Name", columns="events", values="count").fillna(0)>>> df2events  a   b   cName            jerry   2.0 1.0 0.0joe     8.0 0.0 1.0megan   0.0 4.0 1.0绘制数据:from bokeh.plotting import figurefrom bokeh.palettes import viridisnames = 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)绘制此图的另一种方法是使用 Holoviews 库(只需添加此库,因为 Holoviews 可以生成一些比 Bokeh 更简洁的代码)。Holoviews 会为您处理数据转换,因此您不需要任何额外的工作:import holoviews as hvhv.extension("bokeh")hv.Bars(df, kdims=["Name", "events"], vdims="count").opts(stacked=True)至于替代解决方案,我并不完全确定。我认为与 167 种类型的事件进行视觉比较并不容易(即 167 种独特的颜色,因此这些颜色可能不是非常容易辨别 - 更不用说具有 167 个条目的笨拙图例)。如果这种可视化方式没有帮助,我建议使用 Holoviews 库为您的每个名字创建一个条形图。然后,您可以切换数据中每个人的绘图。import holoviews as hv hv.extension("bokeh") hv.Bars(df, kdims=["Name", "events"], vdims="count").groupby("Name")
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python