查看原文
其他

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

才哥 可以叫我才哥 2022-07-01

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

我们的第95篇原创

作者:才哥


大家好,我是才哥。

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

plt.text方法

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

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 = [ 29211714, ]
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可以很好的实现柱状图(含条形图)数据标签显示需求。

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

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

# 显示数据标签
plt.bar_label(bar, label_type='edge')

官网参考:

https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.bar_label.html

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

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

-->推荐阅读<--

『数据可视化』一文掌握Pandas可视化图表

2021-07-31

北上广深哪个城市的购物中心最多?

2021-07-25

想知道所在的城市有多少条道路?我用python发现北京一共有1.5万条道路!

2021-07-11

Python输出还可以这么花里胡哨,这个第三方库值得你了解一下

2021-05-10

matplotlib也玩动态可视化

2020-08-09

学习 Matplotlib 数据可视化

2020-07-17

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存