1 回答

TA贡献1848条经验 获得超10个赞
从
matplotlib 3.4.2
,使用matplotlib.pyplot.bar_label
。
绘制列表和注释
gender = ['M', 'F']
numbers = [1644, 1771]
plt.figure(figsize=(12, 6))
p = plt.bar(gender, numbers, width=0.1, bottom=None, align='center', data=None)
plt.bar_label(p)
plt.show()
用熊猫绘图并注释
将列表转换为数据框并绘制pandas.DataFrame.plot
df = pd.DataFrame({'value': numbers, 'gender': gender})
ax = df.plot(x='gender', kind='bar', figsize=(12, 6), rot=0, legend=False, align='center', width=0.1)
ax.bar_label(ax.containers[0])
plt.show()
原始答案
为了指定注释的水平对齐方式,使用
ha
参数matplotlib:文本属性和布局
matplotlib:注释
matplotlib.pyplot.annotate
根据JohanC的建议
一个技巧是使用
f'{value}\n'
as 字符串和未修改的value
(或numbers
)作为 y 位置,连同va='center'
.这也适用于
plt.text
. 或者,plt.annotation
接受以“点”或“像素”为单位的偏移量。
选项1
来自
lists
价值观和类别
import matplotlib.pyplot as plt
gender = ['M', 'F']
numbers = [1644, 1771]
plt.figure(figsize=(12, 6))
bars = plt.bar(gender, numbers, width=0.1, bottom=None, align='center', data=None)
for i in range(len(numbers)):
plt.annotate(f'{numbers[i]}\n', xy=(gender[i], numbers[i]), ha='center', va='center')
选项 2
来自
pandas.DataFrame
用于
pandas.DataFrame.iterrows
提取注释所需的位置x
。y
x
是分类'gender'
值y
是数字'value'
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame({'value': [1771, 1644], 'gender': ['F', 'M']})
plt.figure(figsize=(12, 6))
bars = plt.bar(df.gender, df.value, width=0.1, bottom=None, align='center', data=None)
for idx, (value, gender) in df.iterrows():
plt.annotate(f'{value}\n', xy=(gender, value), ha='center', va='center')
绘图输出
添加回答
举报