【问题标题】:How to display GroupBy Count as Bokeh vbar for categorical data如何将 GroupBy Count 显示为分类数据的 Bokeh vbar
【发布时间】:2019-01-01 02:53:45
【问题描述】:

我在 0.13.0 中创建散景 vbar 时遇到了一个小问题 来自数据框groupbycount 操作。回复here 是针对多级组的,而我的则不是。

发布后的更新

  • 根据提供的答案添加了示例数据和代码,以查看问题是我的代码还是其他问题

大纲

pandas 数据框包含调查回复

  • 优秀
  • 可怜
  • 满意
  • 很好

('ResponseID','RateGeneral','RateAccomodation','RateClean','RateServices') 列下,dtype 设置为类别。我想使用

显示响应计数组的散景 vbar
DemoDFCount = DemoDF.groupby('RateGeneral').count()

我的散景代码如下所示

pTest= figure(title='Rating in General',plot_height=350)
pTest.vbar(width=0.9,source=DemoDFCount, x='RateGeneral',top='ResponseID')
show(pTest))

但不会生成任何图表,只有标题和工具栏

如果我使用 pandas DemoDFCount.plot.bar(legend=False) 我可以绘制一些东西,但是如何在散景中创建这个图表?

以 json 格式导出样本数据

来自DemoDF.to_json()的50行样本数据

'{"ResponseID":{"0":1,"1":2,"2":3,"3":4,"4":5,"5":6,"6":7,"7":8,"8":9,"9":10,"10":11,"11":12,"12":13,"13":14,"14":15,"15":16,"16":17,"17":18,"18":19,"19":20,"20":21,"21":22,"22":23,"23":24,"24":25,"25":26,"26":27,"27":28,"28":29,"29":30,"30":31,"31":32,"32":33,"33":34,"34":35,"35":36,"36":37,"37":38,"38":39,"39":40,"40":41,"41":42,"42":43,"43":44,"44":45,"45":46,"46":47,"47":48,"48":49,"49":50},"RateGeneral":{"0":"Good","1":"Satisfactory","2":"Good","3":"Poor","4":"Good","5":"Satisfactory","6":"Excellent","7":"Good","8":"Good","9":"Satisfactory","10":"Satisfactory","11":"Excellent","12":"Satisfactory","13":"Excellent","14":"Satisfactory","15":"Very Good","16":"Satisfactory","17":"Excellent","18":"Very Good","19":"Excellent","20":"Satisfactory","21":"Good","22":"Satisfactory","23":"Excellent","24":"Satisfactory","25":"Good","26":"Excellent","27":"Very Good","28":"Good","29":"Very Good","30":"Good","31":"Satisfactory","32":"Very Good","33":"Very Good","34":"Very Good","35":"Good","36":"Excellent","37":"Satisfactory","38":"Excellent","39":"Good","40":"Good","41":"Satisfactory","42":"Very Good","43":"Very Good","44":"Poor","45":"Excellent","46":"Good","47":"Excellent","48":"Satisfactory","49":"Good"},"RateAccomodation":{"0":"Very Good","1":"Excellent","2":"Satisfactory","3":"Satisfactory","4":"Good","5":"Good","6":"Very Good","7":"Very Good","8":"Good","9":"Satisfactory","10":"Satisfactory","11":"Excellent","12":"Satisfactory","13":"Excellent","14":"Good","15":"Very Good","16":"Good","17":"Excellent","18":"Excellent","19":"Very Good","20":"Good","21":"Satisfactory","22":"Good","23":"Excellent","24":"Satisfactory","25":"Very Good","26":"Excellent","27":"Excellent","28":"Good","29":"Very Good","30":"Very Good","31":"Very Good","32":"Excellent","33":"Very Good","34":"Very Good","35":"Very Good","36":"Excellent","37":"Satisfactory","38":"Excellent","39":"Good","40":"Excellent","41":"Poor","42":"Very Good","43":"Very Good","44":"Poor","45":"Excellent","46":"Satisfactory","47":"Excellent","48":"Good","49":"Good"},"RateClean":{"0":"Excellent","1":"Excellent","2":"Satisfactory","3":"Good","4":"Excellent","5":"Very Good","6":"Very Good","7":"Excellent","8":"Excellent","9":"Satisfactory","10":"Satisfactory","11":"Excellent","12":"Good","13":"Good","14":"Excellent","15":"Excellent","16":"Good","17":"Excellent","18":"Excellent","19":"Excellent","20":"Good","21":"Very Good","22":"Poor","23":"Very Good","24":"Satisfactory","25":"Very Good","26":"Excellent","27":"Good","28":"Poor","29":"Good","30":"Excellent","31":"Good","32":"Good","33":"Very Good","34":"Satisfactory","35":"Good","36":"Excellent","37":"Satisfactory","38":"Excellent","39":"Good","40":"Very Good","41":"Satisfactory","42":"Excellent","43":"Excellent","44":"Very Good","45":"Excellent","46":"Good","47":"Excellent","48":"Good","49":"Excellent"},"RateServices":{"0":"Very Good","1":"Excellent","2":"Good","3":"Good","4":"Excellent","5":"Good","6":"Good","7":"Very Good","8":"Good","9":"Satisfactory","10":"Satisfactory","11":"Excellent","12":"Good","13":"Very Good","14":"Good","15":"Excellent","16":"Poor","17":"Excellent","18":"Excellent","19":"Excellent","20":"Good","21":"Good","22":"Very Good","23":"Excellent","24":"Satisfactory","25":"Very Good","26":"Excellent","27":"Very Good","28":"Good","29":"Excellent","30":"Very Good","31":"Excellent","32":"Good","33":"Excellent","34":"Very Good","35":"Very Good","36":"Excellent","37":"Satisfactory","38":"Excellent","39":"Good","40":"Very Good","41":"Satisfactory","42":"Excellent","43":"Excellent","44":"Good","45":"Excellent","46":"Very Good","47":"Excellent","48":"Good","49":"Very Good"}}'

【问题讨论】:

    标签: bokeh pandas-groupby


    【解决方案1】:

    在另一个问题中它是多层次的这一事实并不真正相关。当您使用 Pandas GroupBy 作为 Bokeh 的数据源时,Bokeh 使用 group.describe 的结果(包括每组每列的计数)作为数据源的内容。这是一个完整的示例,显示了“汽车”数据集中的 Counts-per-Origin:

    from bokeh.io import show, output_file
    from bokeh.plotting import figure
    from bokeh.sampledata.autompg import autompg as df
    
    output_file("groupby.html")
    
    df.origin = df.origin.astype(str)
    group = df.groupby('origin')
    
    p = figure(plot_height=350, x_range=group, title="Count by Origin",
               toolbar_location=None, tools="")
    
    # using yr_count, but count for any column would work
    p.vbar(x='origin', top='yr_count', width=0.8, source=group)
    
    p.y_range.start = 0
    p.xgrid.grid_line_color = None
    
    show(p)
    

    【讨论】:

    • 在 groupby 中使用 count() 会有什么不同吗?当我在我的组中使用 describe 时,它​​提到了 <bound method NDFrame.describe,其中在示例数据中它的 <bound method GroupBy.describe of <pandas.core.groupby.groupby.DataFrameGroupBy object 另外我得到了一个绘图区域但没有条形图,如果我在 figure 中包含 x_range =group 我得到一个错误
    • 那么您需要更新版本的 Bokeh,能够直接传递组作为范围是一个新功能。或者,您可以手动传递范围的因素列表(即组名)。
    • 我的版本被报告为bokeh.__version__ 为0.13.0,output_notebook()为BokehJS 0.13.0成功加载。
    • 我想打开一个新的 SO 问题或 GH 问题然后,我不知道为什么在没有看到实际代码的情况下传递 GroupBy 会导致错误。
    猜你喜欢
    • 2018-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    • 2016-09-25
    • 2016-01-06
    相关资源
    最近更新 更多