如何在条形图(Python)的条形上方写文本?

Posted

技术标签:

【中文标题】如何在条形图(Python)的条形上方写文本?【英文标题】:How to write text above the bars on a bar plot (Python)? 【发布时间】:2017-03-22 06:01:35 【问题描述】:

我有这个图表: 我想在每列上方写下计数。这些值在第一个和第二个列表中。你能帮我解决这个问题吗?我尝试了一些没有成功的东西。

这是图表的代码:

countListFast = [1492.0, 497.0, 441.0, 218.0, 101.0, 78.0, 103.0]
countListSlow = [1718.0, 806.0, 850.0, 397.0, 182.0, 125.0, 106.0]

errorRateListOfFast = ['9.09', '9.09', '9.38', '9.40', '7.89', '8.02', '10.00']
errorRateListOfSlow = ['10.00', '13.04', '14.29', '12.50', '14.29', '14.53', '11.11']

opacity = 0.4
bar_width = 0.35

plt.xlabel('Tasks')
plt.ylabel('Error Rate')
plt.xticks(range(len(errorRateListOfFast)),('[10-20)', '[20-30)', '[30-50)', '[50-70)','[70-90)', '[90-120)', ' [120 < )'), rotation=30)
        plt.bar(np.arange(len(errorRateListOfFast))+ bar_width, errorRateListOfFast, bar_width, align='center', alpha=opacity, color='b', label='Fast <= 6 sec.')
plt.bar(range(len(errorRateListOfSlow)), errorRateListOfSlow, bar_width, align='center', alpha=opacity, color='r', label='Slower > 6 sec.')
plt.legend()
plt.tight_layout()
plt.show()

【问题讨论】:

这能回答你的问题吗? Adding value labels on a matplotlib bar chart 【参考方案1】:

plt.bar() 返回一个矩形列表,可用于在每个条形上方放置合适的文本,如下所示:

import matplotlib.pyplot as plt
import numpy as np

errorRateListOfFast = ['9.09', '9.09', '9.38', '9.40', '7.89', '8.02', '10.00']
errorRateListOfSlow = ['10.00', '13.04', '14.29', '12.50', '14.29', '14.53', '11.11']

# Convert to floats
errorRateListOfFast = [float(x) for x in errorRateListOfFast]
errorRateListOfSlow = [float(x) for x in errorRateListOfSlow]

opacity = 0.4
bar_width = 0.35

plt.xlabel('Tasks')
plt.ylabel('Error Rate')

plt.xticks(range(len(errorRateListOfFast)),('[10-20)', '[20-30)', '[30-50)', '[50-70)','[70-90)', '[90-120)', ' [120 < )'), rotation=30)
bar1 = plt.bar(np.arange(len(errorRateListOfFast)) + bar_width, errorRateListOfFast, bar_width, align='center', alpha=opacity, color='b', label='Fast <= 6 sec.')
bar2 = plt.bar(range(len(errorRateListOfSlow)), errorRateListOfSlow, bar_width, align='center', alpha=opacity, color='r', label='Slower > 6 sec.')

# Add counts above the two bar graphs
for rect in bar1 + bar2:
    height = rect.get_height()
    plt.text(rect.get_x() + rect.get_width() / 2.0, height, f'height:.0f', ha='center', va='bottom')

plt.legend()
plt.tight_layout()
plt.show()

给你:

ha='center'va='bottom' 指的是文本相对于 xy 坐标的对齐方式,即水平和垂直对齐方式。

【讨论】:

【参考方案2】:

查看以下链接,它可能会有所帮助:

http://matplotlib.org/examples/api/barchart_demo.html

【讨论】:

在上面的例子中,这是什么 ha='center', va='bottom' - 有什么意义,如果你能指定的话。

以上是关于如何在条形图(Python)的条形上方写文本?的主要内容,如果未能解决你的问题,请参考以下文章

条形图上条形图上方 ggplot 汇总统计量的注释

如何在 QwtPlot 图上方放置一个条形图?

如何在 Python 中 Seaborn 的 countplot 中的每个条形上方添加值? [复制]

如何在分组条形图上方显示百分比

python - 如何在条形图顶部显示值[重复]

如何在百分比条形图上方添加百分比或计数标签?