一行代码简单搞定matplotlib柱状图显示数据标签

2021-08-05 15:30:33 浏览数 (1)

关注可以叫我才哥,学习分享数据之美

我们的第95篇原创

作者:才哥


大家好,我是才哥。

在用matplotlib绘制柱状图的时候,往往需要将数据显示在柱状图上,今天我们就简单介绍一下。

plt.text方法

matplotlib 3.4.0之前的版本中,一般用plt.text方法来进行数据标签的绘制。plt.text如名字所示就是可以在图像任何位置绘制指定文字,基于此,我们只需要在对应数据点的坐标点位置绘制对应的值即可实现数据标签显示。

代码语言:javascript复制
import pandas as pd
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False

fig, ax = plt.subplots(figsize=(8,4), dpi=100)

y_data = [ 29, 21, 17, 14, ]
x_data = ('中国', '美国', '日本', '澳大利亚')

# 柱状图颜色
color = 'coral'

# 柱状图
bar = plt.bar(x_data, y_data, 0.5, color=colors[1],edgecolor='grey')

# 设置标题
ax.set_title('东京奥运会金牌数-截止8月2日',fontsize=14,y=1.05)
# 设置坐标轴标题
ax.set_ylabel("",fontsize = 12,color = 'black',alpha = 0.7,rotation=360)
# 设置Y轴区间
ax.set_ylim(0,30)

# 显示数据标签
for a,b in zip(x_data, y_data):
    plt.text(a,b,
             b,
             ha='center', 
             va='bottom',
            )

# 边框隐藏
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.spines['bottom'].set_visible(False)
ax.spines['left'].set_visible(False)

对于plt.text(x, y, s, fontdict=None, **kwargs)

x,y:文本(标签)所在的位置

s:用于显示的文本

ha:水平对齐方式(可选:'center', 'right', 'left')

va:垂直对齐方式(可选:'center', 'top', 'bottom', 'baseline', 'center_baseline')

plt.bar_label方法

在最新的matplotlib版本(3.4.0及之后)中,我们发现有个函数方法plt.bar_label可以很好的实现柱状图(含条形图)数据标签显示需求。

代码语言:javascript复制
plt.bar_label(
    container,
    labels=None,
    *,
    fmt='%g',
    label_type='edge',
    padding=0,
    **kwargs,
)

containerbarbarh函数返回值 labels :标签文本列表,默认为None,即为使用fmt参数格式化的柱子的数据 fmt:标签的格式字符串,默认值为'%g',即将标签值格式化为浮点数 label_type :标签类型,可选参数为'edge', 'center',默认值为'edge'。对于普通柱状图,该参数仅用于控制标签的位置;对于堆积柱状图,不同标签类型对应不同的标签值:'edge':标签位于柱子的端点, 'center':标签位于柱子的中部 padding :标签与柱子之间的距离,单位为像素,默认值为0

在原代码中,替换显示数据标签部分代码即可

代码语言:javascript复制
# 显示数据标签
plt.bar_label(bar, label_type='edge')

官网参考: https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.bar_label.html

以上就是本次的简单内容,大家可自行修改参数感受!

最后,祝福我们本届奥运会更多金!

0 人点赞