本文介紹了Seaborn Catplot 在條形圖上設置值的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我像這樣在seaborn
中繪制了一個catplot
將 seaborn 導入為 sns將熊貓導入為 pd數據= {'年':[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密歇根州阿伯市"、密歇根州安娜堡"、密歇根州安娜堡"、密歇根州安娜堡"、賓夕法尼亞州費城"、賓夕法尼亞州費城"、賓夕法尼亞州費城"、賓夕法尼亞州費城"、'密歇根州安娜堡市都會區', '密歇根州安娜堡市都會區', '密歇根州安娜堡市都會區', '密歇根州安娜堡市都會區'], 'geo': ['04000US26', '04000US26','04000us26','04000us26','05000us26161','05000us26161','05000us26161','16000us2603000','16000us2603000','16000us2603000','16000us4260000','16000us4260000','16000US4260000','16000US4260000','16000US42600','16000US42600','16000US42600','16000US42600','16000US42600','16000US42600','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,59003.0,56835.0,55990.0,39770.0,37192.0,37460.0,38253.0,62484.0,59055.0,60805.0,61003.0],收入_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 表示的頂部添加每個條的值.例如在 2013
中,Michigan
的欄位于 48411
所以我想在上面添加值 48.4K
酒吧.對于所有的酒吧也是如此.
解決方案
更新至matplotlib v3.4.2
- 使用
對于單個或多個地塊
g = sns.catplot(x='year', y='income', data=df, kind='bar', col='geo_name',col_wrap=3,圖例=真)g.fig.set_size_inches(15, 8)g.fig.subplots_adjust(top=0.9)g.fig.suptitle('帶注釋的條形計數')# 遍歷軸對于 g.axes.ravel() 中的 ax:# 添加注釋對于 ax.containers 中的 c:標簽 = [f'{(v.get_height()/1000):.1f}K' for v in c]ax.bar_label(c, 標簽=標簽, label_type='edge')ax.margins(y=0.2)plt.show()
I plotted a
catplot
inseaborn
like thisimport 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 forMichigan
is at48411
so I want to add the value48.4K
on top of that bar. Likewise for all the bars.解決方案Updated as of
matplotlib v3.4.2
- Use
matplotlib.pyplot.bar_label
- See the matplotlib: Bar Label Demo page for additional formatting options.
- Tested with
pandas v1.2.4
, which is usingmatplotlib
as the plot engine. - Use the
fmt
parameter for simple formats, andlabels
parameter for customized string formatting. - See Adding value labels on a matplotlib bar chart for other plotting options related to the new method.
For single plot only
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')
For single or multiple plots
g = sns.catplot(x='year', y='income', data=df, kind='bar', col='geo_name', col_wrap=3, legend=True) g.fig.set_size_inches(15, 8) g.fig.subplots_adjust(top=0.9) g.fig.suptitle('Bar Count with Annotations') # iterate through axes for ax in g.axes.ravel(): # add annotations 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') ax.margins(y=0.2) plt.show()
這篇關于Seaborn Catplot 在條形圖上設置值的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!
【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持! - Use