如何使用Matplotlib模块的text()函数给柱形图添加美丽的标签数据?

1 简单引入

  • 在进行数据分析时,当一些图表数据,比如柱形图我们想让它更直观的显示一些内容,有时候会给柱形图添加标签, 那如何实现这样的效果呢?
  • 还有比如我们把某手机品牌1-12月每月的销量制作成柱形图,那如何在柱形图上显示具体的每月销量的标签?
  • 带着这个问题,我们来研究下这个功能吧;
  • 本文使用的是PythonMatplotlib模块的text()函数,它能给图表的指定位置添加标签、注释或标注。

2 关于text()函数

2.1 Matplotlib安装

  • text()函数是PythonMatplotlib模块一个函数;
  • 具体引入的话,需要先安装Matplotlib模块:
python 复制代码
pip install matplotlib

2.2 text()引入

  • 需要插入pylot模块:
python 复制代码
import matplotlib.pyplot as plt
  • 使用方法是:
python 复制代码
plt.text()

2.3 text()源码

  • 路径如下:
python 复制代码
Python37\Lib\site-packages\matplotlib\pyplot.py
  • 源码如下:
python 复制代码
# Autogenerated by boilerplate.py.  Do not edit as changes will be lost.
@_copy_docstring_and_deprecators(Axes.text)
def text(x, y, s, fontdict=None, **kwargs):
    return gca().text(x, y, s, fontdict=fontdict, **kwargs)

2.4 text()参数说明

  • 详细参数说明如下:
参数 说明
x, y:float 放置文本的位置
s: str 文本
Fontdict:默认无 覆盖默认文本属性的字典
**kwargs 文本属性

2.5 text()两个简单示例

  • 示例1:在一个没有任何数据的图表上显示一个标签:
python 复制代码
# -*- coding:utf-8 -*-
# 作者:虫无涯
# 日期:2023/11/17 
# 文件名称:test_plt_text().py
# 作用:Matplotlib模块的text()函数的应用
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson

import matplotlib.pyplot as plt

plt.figure(figsize=(5, 5))
plt.text(0.5, 0.5, "这是一个标签")
plt.show()
  • 结果显示如下,发现中文是乱码的:
  • 要解决中文乱码,我们加一行代码:
python 复制代码
plt.rcParams['font.sans-serif'] = ['SimHei']
  • 之后显示如下:
  • 示例2:我们添加几个点数据,并设置文本数据:
python 复制代码
# -*- coding:utf-8 -*-
# 作者:虫无涯
# 日期:2023/11/17 
# 文件名称:test_plt_text().py
# 作用:Matplotlib模块的text()函数的应用
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson

import matplotlib.pyplot as plt

plt.figure(figsize=(5, 5))
x = [1, 2, 6]
x_pos = 1
y_pos = 1.5

plt.text(x_pos, y_pos, "这是一个标签")
plt.plot(x)
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.show()
  • 结果显示如下:

3 柱形图绘制并添加标签

3.1 目标数据

  • 我们先创建一个产品0-12月份的每月销量数据表plt_text.xlsx
python 复制代码
月份	    销量
1月	    1200
2月	    2400
3月	    112
4月	    125
5月	    555
6月	    135
7月	    136
8月	    269
9月	    627
10月	876
11月	350
12月	233

3.2 读取excel数据

python 复制代码
class TestPltText():
    def __init__(self):
        super(TestPltText, self).__init__()

        # 读取excel数据
        self.data = "./plt_text.xlsx"
        self.data_excel = pd.DataFrame(pd.read_excel(self.data))

        # 获取相关内容
        self.data_content = self.data_excel[["月份", "销量"]]
        self.data_content01 = self.data_content.sort_values("销量", ascending=True)

3.3 设置窗口大小和xy轴坐标

python 复制代码
    def test_plt_text(self):

        # 设置窗口大小
        plt.figure(figsize=(5, 4))

        # 构造x,y轴坐标
        y = np.array(list(self.data_content01["销量"]))
        x_ticks = list(self.data_content01["月份"])
        x = range(len(x_ticks))

3.4 绘制柱形图

python 复制代码
# 绘制柱形图
plt.bar(x, y, width=0.5, align="center", color="b", alpha=0.6)
plt.xticks(range(len(x_ticks)), x_ticks, fontsize=6, rotation=90)

3.5 设置标签

python 复制代码
# x、y轴标签
plt.xlabel('月份')
plt.ylabel('销量')
plt.title('月销量(万)')
# 设置标签
for label1, label2 in zip(x, y):
    plt.text(label1, label2+10,
             '%.0f' % label2,
             ha='center',
             va='bottom',
             fontsize=9)

3.6 解决乱码和结果显示

python 复制代码
# 设置y轴的范围
plt.ylim(0, 2600)
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.show()

4 完整源码

python 复制代码
# -*- coding:utf-8 -*-
# 作者:虫无涯
# 日期:2023/11/17 
# 文件名称:test_plt_text().py
# 作用:Matplotlib模块的text()函数的应用
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import random


class TestPltText():
    def __init__(self):
        super(TestPltText, self).__init__()

        # 读取excel数据
        self.data = "./plt_text.xlsx"
        self.data_excel = pd.DataFrame(pd.read_excel(self.data))

        # 获取相关内容
        self.data_content = self.data_excel[["月份", "销量"]]
        self.data_content01 = self.data_content.sort_values("销量", ascending=True)

    def test_plt_text(self):

        # 设置窗口大小
        plt.figure(figsize=(5, 4))

        # 构造x,y轴坐标
        y = np.array(list(self.data_content01["销量"]))
        x_ticks = list(self.data_content01["月份"])
        x = range(len(x_ticks))

        # 绘制柱形图
        plt.bar(x, y, width=0.5, align="center", color="b", alpha=0.6)
        plt.xticks(range(len(x_ticks)), x_ticks, fontsize=6, rotation=90)

        # x、y轴标签
        plt.xlabel('月份')
        plt.ylabel('销量')
        plt.title('月销量(万)')
        # 设置标签
        for label1, label2 in zip(x, y):
            plt.text(label1, label2+10,
                     '%.0f' % label2,
                     ha='center',
                     va='bottom',
                     fontsize=9)
        # 设置y轴的范围
        plt.ylim(0, 2600)
        plt.rcParams['font.sans-serif'] = ['SimHei']
        plt.show()


if __name__ == "__main__":
    plt_text = TestPltText()
    plt_text.test_plt_text()

5 结果显示

5.1 从小到大排序

  • 设置如下:
python 复制代码
self.data_content01 = self.data_content.sort_values("销量", ascending=True)
  • 结果显示:

5.2 从大到小排序

  • 设置如下:
python 复制代码
self.data_content01 = self.data_content.sort_values("销量", ascending=True)
plt.bar(x, y, width=0.5, align="center", color="c", alpha=0.6)
  • 结果显示:

5.3 原序列输出显示

  • 不进行排序,直接进行输出原图:
python 复制代码
 # 构造x,y轴坐标
y = np.array(list(self.data_content["销量"]))
x_ticks = list(self.data_content["月份"])
x = range(len(x_ticks))

plt.bar(x, y, width=0.5, align="center", color="k", alpha=0.6)
  • 结果显示:
相关推荐
天天爱吃肉82186 分钟前
商用车多体动力学实战笔记|第6篇:动力传动系统(发动机、变速箱、分动器、TCS、LSD限滑差速)
大数据·人工智能·笔记·python·嵌入式硬件·汽车
海盗123425 分钟前
微软技术周报 ——2026-08-03
后端·python·microsoft·c#·.netcore
大数据魔法师25 分钟前
【最全详解】DuckDB Python 全套 API 语法、参数与实战用法(零基础全覆盖)
python·数据分析
MC皮蛋侠客2 小时前
SQLAlchemy 系列(七):高级建模与高效写入——批量 DML、方言与扩展
数据库·python
Zane19942 小时前
@property 到底是怎么把方法伪装成属性的?一文吃透 property、staticmethod、classmethod
后端·python
世人万千丶2 小时前
鸿蒙Crash高级捕获与异常监控:全局异常兜底/崩溃栈解析/符号表还原/智能聚类/闭环修复
学习·机器学习·华为·数据挖掘·harmonyos·鸿蒙·聚类
qq_316411032 小时前
AI 情感陪伴智能潮玩软硬件一体化开发案例
人工智能·python
废弃的小码农3 小时前
功能测试--Day07--Python编程基础
开发语言·python
zx1154503 小时前
大模型工具调用次数限制
人工智能·python
MC皮蛋侠客3 小时前
SQLAlchemy 系列(八):AsyncIO、并发与 Web 生命周期——让每个并发任务持有自己的 Session
数据库·python