Seaborn Catplot在条形图上设置值 [英] Seaborn Catplot set values over the bars

查看:133
本文介绍了Seaborn Catplot在条形图上设置值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在 seaborn 中绘制了一个 catplot 像这样

导入 seaborn 为 sns将熊猫作为pd导入数据= {'year':[2016、2013、2014、2015、2016、2013、2014、2015、2016、2013、2014、2015、2016、2013、2014、2015、2016、2013、2014、2015],'geo_name': ['密歇根州', '密歇根州', '密歇根州', '密歇根州', '密歇根州沃什特诺县', '密歇根州沃什特诺县', '密歇根州沃什特诺县', '密歇根州沃什特诺县', '安Arbor, MI', 'Ann Arbor, MI', 'Ann Arbor, MI', 'Ann Arbor, MI', 'Philadelphia, PA', 'Philadelphia, PA', 'Philadelphia, PA', 'Philadelphia, PA',密歇根州都会区安阿伯市",密歇根州都会区安阿伯市",密歇根州都会市安阿伯市",密歇根州都会市安阿伯市","geo":['04000US26','04000US26','04000US26','04000US26','05000US26161','05000US26161','05000US26161','05000US26161','16000US2603000','16000US2603000','16000US2603000','16000US2603000','16000US4260000','16000US4260000','16000US4260000'','16000US4260000','31000US11460','31000US11460','31000US11460','31000US11460'],收入":[50803.0,48411.0,49087.0,49576.0,62484.0,59055.0,60805.0,61003.0,57697.0,55003.0,56835.0,55990.0,39770.0,37192.0,37460.0,38253.0,62484.0,59055.0,60805.0,61003.0],'income_moe':[162.0,163.0,192.0,186.0,984.0,985.0,958.0,901.0,2046.0,1688.0,1320.0,1259.0,567.0,424.0、430.0、511.0、984.0、985.0、958.0、901.0]}df = pd.DataFrame(数据)g = sns.catplot(x ='year',y ='income',data = df,kind ='bar',hue ='geo_name',legend = True)g.fig.set_size_inches(15,8)g.fig.subplots_adjust(top = 0.81,right = 0.86)

我得到如下所示的输出

我想以K表示形式将每个条的值添加到其顶部.例如在 2013Michigan 的栏位于 48411 所以我想在它上面添加值 48.4K酒吧.对于所有的酒吧也是如此.

解决方案

matplotlib v3.4.2

更新
  • 使用

    I plotted a catplot in seaborn like this

    import seaborn as sns
    import pandas as pd
    
    data  = {'year': [2016, 2013, 2014, 2015, 2016, 2013, 2014, 2015, 2016, 2013, 2014, 2015, 2016, 2013, 2014, 2015, 2016, 2013, 2014, 2015], 'geo_name': ['Michigan', 'Michigan', 'Michigan', 'Michigan', 'Washtenaw County, MI', 'Washtenaw County, MI', 'Washtenaw County, MI', 'Washtenaw County, MI', 'Ann Arbor, MI', 'Ann Arbor, MI', 'Ann Arbor, MI', 'Ann Arbor, MI', 'Philadelphia, PA', 'Philadelphia, PA', 'Philadelphia, PA', 'Philadelphia, PA', 'Ann Arbor, MI Metro Area', 'Ann Arbor, MI Metro Area', 'Ann Arbor, MI Metro Area', 'Ann Arbor, MI Metro Area'], 'geo': ['04000US26', '04000US26', '04000US26', '04000US26', '05000US26161', '05000US26161', '05000US26161', '05000US26161', '16000US2603000', '16000US2603000', '16000US2603000', '16000US2603000', '16000US4260000', '16000US4260000', '16000US4260000', '16000US4260000', '31000US11460', '31000US11460', '31000US11460', '31000US11460'], 'income': [50803.0, 48411.0, 49087.0, 49576.0, 62484.0, 59055.0, 60805.0, 61003.0, 57697.0, 55003.0, 56835.0, 55990.0, 39770.0, 37192.0, 37460.0, 38253.0, 62484.0, 59055.0, 60805.0, 61003.0], 'income_moe': [162.0, 163.0, 192.0, 186.0, 984.0, 985.0, 958.0, 901.0, 2046.0, 1688.0, 1320.0, 1259.0, 567.0, 424.0, 430.0, 511.0, 984.0, 985.0, 958.0, 901.0]}
    df = pd.DataFrame(data)
    
    g = sns.catplot(x='year', y='income', data=df, kind='bar', hue='geo_name', legend=True)
    g.fig.set_size_inches(15,8)
    g.fig.subplots_adjust(top=0.81,right=0.86)  
    

    I am getting an output like shown below

    I want to add the values of each bar on its top in K representation. For example in 2013 the bar for Michigan is at 48411 so I want to add the value 48.4K on top of that bar. Likewise for all the bars.

    解决方案

    Updated as of matplotlib v3.4.2

    g = sns.catplot(x='year', y='income', data=df, kind='bar', hue='geo_name', legend=True)
    g.fig.set_size_inches(15, 8)
    g.fig.subplots_adjust(top=0.81, right=0.86)
    
    # extract the matplotlib axes_subplot objects from the FacetGrid
    ax = g.facet_axis(0, 0)
    
    # iterate through the axes containers
    for c in ax.containers:
        labels = [f'{(v.get_height() / 1000):.1f}K' for v in c]
        ax.bar_label(c, labels=labels, label_type='edge')
    

    这篇关于Seaborn Catplot在条形图上设置值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆