如何使用 plt.bar_label() 有选择地标记条形?

问题描述 投票:0回答:1

使用

matplotlib
bars = plt.bar(...)
中绘制条形图时,可以将返回的对象传递给
plt.bar_label(bars, labels)
以方便标记。

plt.bar_label(bars, labels)
为所有栏添加标签。我只想标记一个子集(前三个),最好使用
plt.bar_label()
。我不想调用
plt.text()
plt.annotate()

有没有办法从

bars
中切出我想要的条形,并且只使用
plt.bar_label()
标记那些条形?


下面的示例显示了所有条形都被标记的默认行为。

enter image description here

#Imports
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

# Data for testing
values = [10, 9, 10.5, 4, 3.1, 2]
labels = [
    'sensor calibration', 'sensor response', 'noise floor estimate',
    'noise floor theta', 'weighted response coef', 'linear estimate'
]

#Bar plot with labels
ax = plt.figure(figsize=(5, 2)).add_subplot()
bars = ax.bar(range(6), values, color='lightgray')
ax.set(xlabel='x', ylabel='value', title='Data')
ax.spines[['top', 'right']].set_visible(False)

show_default_behaviour = False
label_kwargs = dict(rotation=90, weight='bold', fontsize=8, label_type='center')

#Add all bar labels
ax.bar_label(bars, labels, **label_kwargs)
matplotlib bar-chart
1个回答
0
投票

您可以切出所需的条形,但随后您必须将它们重新封装在

BarContainer
中。生成的对象可以像以前一样传递给
plt.bar_label()

enter image description here

#bars = <from OP's code>

#Only label the first k bars
from matplotlib.container import BarContainer
k = 3

# Slice out the required bars & their values, and
#   re-encapsulate in a `BarContainer`
bars_k = BarContainer(bars[:k], datavalues=bars.datavalues[:k])

#Use bar_label() as before
ax.bar_label(bars_k, labels[:k], **label_kwargs)
© www.soinside.com 2019 - 2024. All rights reserved.