使用
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()
标记那些条形?
下面的示例显示了所有条形都被标记的默认行为。
#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)
您可以切出所需的条形,但随后您必须将它们重新封装在
BarContainer
中。生成的对象可以像以前一样传递给 plt.bar_label()
。
#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)