当前位置: 首页 > 面试题库 >

在matplotlib中的条形图上方显示百分比

端木冷勋
2023-03-14
问题内容

以下是熊猫数据框和从中生成的条形图:

colors_list = ['#5cb85c','#5bc0de','#d9534f']
result.plot(kind='bar',figsize=(15,4),width = 0.8,color = colors_list,edgecolor=None)
plt.legend(labels=result.columns,fontsize= 14)
plt.title("Percentage of Respondents' Interest in Data Science Areas",fontsize= 16)

plt.xticks(fontsize=14)
for spine in plt.gca().spines.values():
    spine.set_visible(False)
plt.yticks([])

数据框
条形图

我需要在相应栏上方显示相应主题的每个兴趣类别的百分比。我可以创建带有百分比的列表,但是我不知道如何将其添加到相应栏的顶部。


问题答案:

尝试将以下for循环添加到您的代码中:

ax = result.plot(kind='bar', figsize=(15,4), width=0.8, color=colors_list, edgecolor=None)

for p in ax.patches:
    width = p.get_width()
    height = p.get_height()
    x, y = p.get_xy() 
    ax.annotate(f'{height}', (x + width/2, y + height*1.02), ha='center')

说明

通常,您可以Axes.annotate在图上添加注释。
此方法采用text注释的值和xy放置注释的坐标。

在一个barplot,每个“条”是由a表示patch.Rectangle,并且每个这些矩形的具有属性widthheightxy矩形的左下角的COORDS,所有这些都可以与所述方法获得patch.get_widthpatch.get_heightpatch.get_xy分别。

将所有内容放在一起,解决方案是遍历您的中的每个补丁Axes,并将注释文本设置height为该补丁的,并xy在补丁中心上方放置一个适当的位置-
根据其高度,宽度和xy坐标计算得出。

为了满足您对百分比进行注释的特定需求,我将首先对您的数据进行规范化,DataFrame然后进行绘制。

colors_list = ['#5cb85c','#5bc0de','#d9534f']

# Normalize result
result_pct = result.div(result.sum(1), axis=0)

ax = result_pct.plot(kind='bar',figsize=(15,4),width = 0.8,color = colors_list,edgecolor=None)
plt.legend(labels=result.columns,fontsize= 14)
plt.title("Percentage of Respondents' Interest in Data Science Areas",fontsize= 16)

plt.xticks(fontsize=14)
for spine in plt.gca().spines.values():
    spine.set_visible(False)
plt.yticks([])

# Add this loop to add the annotations
for p in ax.patches:
    width = p.get_width()
    height = p.get_height()
    x, y = p.get_xy() 
    ax.annotate(f'{height:.0%}', (x + width/2, y + height*1.02), ha='center')


 类似资料:
  • 问题内容: 我有一个条形图,我想在每一列上显示一些文本,该怎么办? 问题答案: 我相信这将为您指明正确的方向: http://matplotlib.sourceforge.net/examples/pylab_examples/barchart_demo.html。 您最感兴趣的部分是: 文本的位置由height函数或列的高度确定,并且放在每列顶部的数字由以下方式写:’%d’%int(height

  • 下面的示例数据不是我正在使用的确切数据,它只是一个具有随机值的数据。 样本数据: 我想创建一个条形图,比较每个区域的x和y列。x和y的条形图应该并排显示。 我使用的代码 下面是我得到的输出。 期望输出: 请建议一些方法来获得所需的输出

  • 我有一个带有4个条形图的条形图,使用MPAndroidChart库将其分为2组。到目前为止,这是可行的。现在,我想在每个组上方显示一个标题。这是我当前的输出(如您所见,标题未显示在每组上方)。 我的代码: 你能看出我做错了什么吗?

  • 我需要在各自的柱上方显示值。不能完全弄清楚。我一直在尝试循环,并被告知可能使用补丁,但我仍然很新,遇到了一些麻烦。帮助将不胜感激!这些图片包括来自 jupyter 笔记本的短代码。 这是伪代码 第一步 第二步 我尝试的实际代码,

  • 我有一个这样的数据帧: 现在,我想绘制水平条形图,其中平台名称位于相应的条形图中,使其看起来像这样: 我该怎么做?

  • 我想绘制INS的收盘价如下,它的工作原理。然后我想在图形上悬停时添加光标。我跟随https://matplotlib.org/3.1.0/gallery/misc/cursor_demo_sgskip.html的演示,这就是我想要的。 但当我将这些行添加到代码中时,它显示值错误。最初我使用历元时间作为x轴,我认为这就是问题所在,所以我将历元时间转换为日期时间,但它仍然不起作用,并且什么也没有绘制。