我无法将条形图的高度扩展到它们的百分比,我该怎么做?我越来越困惑了...
我不想看到条形图的百分比,我想要的是值(40,40,40,40,40,33,17)。
我想要7个条形图,它们的高度是百分比,但是条形图上的容器应该有它们的值名称。第一个条形的值为40。因此,此条形顶部应位于%100水平,但容器必须写为40。
另一个例子;最后一个(Tiktok bar)bar的值为17,因此容器应该显示17,但该bar应该位于%42.5的高度
DataFrame和导入示例
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import matplotlib.ticker as mtick
plt.figure(figsize=(18,11),dpi=100)
sns.set_theme (style="whitegrid", palette="tab20b")
x_ekseni= ['İlgili Sosyal Medya Hesapları']
Website= [40]
Twitter= [40]
Facebook= [40]
Instagram= [40]
Youtube= [40]
Linkedin= [33]
Tiktok= [17]
index=x_ekseni
df = pd.DataFrame({'Website': Website,
'Twitter': Twitter,
'Facebook': Facebook,
'Instagram': Instagram,
'Youtube': Youtube,
'Linkedin': Linkedin,
'Tiktok': Tiktok}, index=index)
df
Website Twitter Facebook Instagram Youtube Linkedin Tiktok
İlgili Sosyal Medya Hesapları 40 40 40 40 40 33 17
Plot
ax = df.plot.bar(stacked=False,edgecolor='white',width = 2.5,linewidth=0.5)
# iterate through the containers
for c in ax.containers:
# get the current segment label (a string); corresponds to column / legend
col = c.get_label()
labels = df[col].replace(0, '')
# add the annotation
ax.bar_label(c, labels=labels, label_type='center', fontweight='bold', color='white',fontsize=10)
plt.title("İstanbul'daki Belediyelerin Sosyal Medya Kullanımı", fontsize=11, fontweight=0, color="black", loc="center")
ax.set_ylabel("İldeki Tüm Belediyeler İçinde Yüzde (n=40)", fontsize= 10)
ax.yaxis.set_major_formatter(mtick.PercentFormatter())
plt.xticks(rotation=0,fontsize=8)
plt.yticks(rotation=0,fontsize=8)
plt.ylim(0,100)
ax.legend(frameon=True, fontsize=8)
2条答案
按热度按时间fdx2calv1#
*在
python 3.11.2
、pandas 2.0.0
、matplotlib 3.7.1
、seaborn 0.12.2
中测试.bar_label
中的labels=
参数。导入和DataFrame
df
使用
pandas.DataFrame.plot
与kind='bar'
绘图使用
seaborn.barplot
绘图注意事项
n=40
计算的,使用以下内容计算'per'
列。ndasle7k2#
要显示堆叠条形图中每个条形顶部的百分比值,可以使用matplotlib提供的bar_label函数。
完整代码: