Sre*_* TP 6 python plot data-visualization matplotlib seaborn
我策划了catplot在seaborn这样的
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)
Run Code Online (Sandbox Code Playgroud)
我得到如下所示的输出
我想在 K 表示中在其顶部添加每个条的值。例如,2013在栏中 for Michiganis at48411所以我想在该栏的48.4K顶部添加值。对于所有酒吧也是如此。
Tre*_*ney 26
matplotlib.pyplot.bar_label截至matplotlib v3.4.2
fmt参数表示简单格式,使用labels参数表示自定义字符串格式。v.get_width代替v.get_height。python 3.11, pandas 1.5.3, matplotlib 3.7.1,seaborn 0.12.2g = sns.catplot(data=df, x='year', y='income', kind='bar', hue='geo_name', legend=True, height=6, aspect=2)
# extract the matplotlib axes_subplot objects from the FacetGrid
ax = g.facet_axis(0, 0) # or ax = g.axes.flat[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')
Run Code Online (Sandbox Code Playgroud)
g = sns.catplot(data=df, x='year', y='income', kind='bar', col='geo_name', col_wrap=3)
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()
Run Code Online (Sandbox Code Playgroud)
df = sns.load_dataset('titanic')
g = sns.catplot(data=df, kind='count', x='survived', hue='sex', col='class')
# iterate through axes
for ax in g.axes.ravel():
# add annotations
for c in ax.containers:
# add custom labels with the labels=labels parameter if needed
# labels = [f'{h}' if (h := v.get_height()) > 0 else '' for v in c]
ax.bar_label(c, label_type='edge')
ax.margins(y=0.2)
Run Code Online (Sandbox Code Playgroud)
我们可以使用 sns.catplot() 返回的 Facet 网格并选择轴。使用 for 循环使用 ax.text() 以我们需要的格式定位 Y 轴值
g = sns.catplot(x='year', y='income', data=data, kind='bar', hue='geo_name', legend=True)
g.fig.set_size_inches(16,8)
g.fig.subplots_adjust(top=0.81,right=0.86)
ax = g.facet_axis(0,0)
for p in ax.patches:
ax.text(p.get_x() - 0.01,
p.get_height() * 1.02,
'{0:.1f}K'.format(p.get_height()/1000), #Used to format it K representation
color='black',
rotation='horizontal',
size='large')
Run Code Online (Sandbox Code Playgroud)