matplotlib数据展示

news2025/4/15 0:30:21

目录

一、绘制直方图

1、简单直方图

2、绘制横向直方图

3、绘制堆叠直方图

4、对比直方图

二、折线图与散点图

三、绘制饼图

四、雷达图

1、简单雷达图

2、多层雷达图

五、总和


在前面的学习中,我们能够使用一些库进行数据的整合,收集,整理等,而在进行了这些操作之后,我们需要把这些整合好的数据进行更加直观的展示,比如用一些统计图来实现,而matplotlib就可以完成这个工作。

matplotlib是一个第三方库,需要使用pip命令去下载

一、绘制直方图

1、简单直方图

我们可以用matplotlib库来绘制一个基本的直方图:

import matplotlib.pyplot as plt     #主要进行绘图的模块
from matplotlib import rcParams     #包含了绘图时的可配置参数

rcParams['font.family'] = rcParams['font.sans-serif'] = 'SimHei'    #设置中文支持,是中文的黑体

ax = plt.figure().add_subplot()     #plt.figure()创建一个可视窗口,add_subplot() 是在窗口里面创建一个可绘画的子图(可以在一个窗口里面绘制多个子图)
ax.bar(x = (0.2 , 0.6 , 0.8 , 1.2) , height = (3 , 5 , 7 , 3.5) , width = 0.1)      #ax.bar()是在子图上绘图,里面的三个参数分别是指:①每个柱子的中心位置②每个柱子的高度③每个柱子的宽度(也可以设置成不同的五个数值)

ax.set_title("我的第一个直方图!")   #为这个子图设置标题
plt.show()      #展示出来

输出:

(注:在绘制柱状图时,程序会根据数据的大小,来控制子图的大小,默认就是宽度比两边的柱子各往左和右一点,高度比最高的柱子高一点)

2、绘制横向直方图

想要绘制横向的直方图,我们只需要把上面的代码稍加改动:

import matplotlib.pyplot as plt     #主要进行绘图的模块
from matplotlib import rcParams     #包含了绘图时的可配置参数

rcParams['font.family'] = rcParams['font.sans-serif'] = 'SimHei'

ax = plt.figure().add_subplot()
ax.barh(y = (0.2 , 0.6 , 0.8 , 1.2) , width = (3 , 5 , 7 , 3.5) , height = 0.1)
     #↑  在这里bar变成了barh,x也变成了y,再把宽和高交换一下
ax.set_title("我的第一个直方图!")
plt.show()

效果:

3、绘制堆叠直方图

有时我们需要在一个柱子上显示多个数据,然后看看总和以及各个数据之间的占比,这时就需要堆叠直方图:

import matplotlib.pyplot as plt     #主要进行绘图的模块
from matplotlib import rcParams     #包含了绘图时的可配置参数

rcParams['font.family'] = rcParams['font.sans-serif'] = 'SimHei'

ax = plt.figure().add_subplot()

labels = ['A' , 'B' , 'C' , 'D']    #创建了x轴上每一个柱子的标签
num1 = [5 , 10 , 7 , 12]
num2 = [6 , 5 , 12 , 10]    #两组中各个柱子的高度

cordx = range(len(num1))    #创建范围对象,给每个柱子创建一个位置,位置的个数就和num1中的个数一样
rects1 = ax.bar(x = cordx , height = num1 , width = 0.5 , color = "red" , label = "Dept1")
#在子图上绘制第一组数据的各个柱状图,里面的参数分别是:①每个柱子的x轴位置 ②柱子高度 ③柱子宽度 ④柱子颜色 ⑤标签
rects2 = ax.bar(x = cordx , height = num2 , width = 0.5 , color = "green" , label = "Dept2" , bottom = num1)
#和上面一样,多了一个bottom,是设置第二组柱子的底部的起始位置,我们设置在了num1的上方,实现了堆叠效果
#上面的参数中“label”标签是应用在了一会图片的右上角

ax.set_ylim(0 , 50)     #设置y轴范围
ax.set_ylabel("Profit")     #设置y轴的标签
ax.set_xticks(cordx)    #设置x轴的刻度
ax.set_xticklabels(labels)      #设置各个刻度的标签
ax.set_xlabel("In year 2025")   #设置x轴的标签
ax.set_title("My Data")     #设置子图的标题
ax.legend()     #显示图例,就是rects1和2里面的label(一会看图片的右上角)
plt.show()  #展示

效果:

4、对比直方图

当我们在一个类中有多组数据时,并且需要比较直观的比较,就需要对比直方图:

import matplotlib.pyplot as plt     #主要进行绘图的模块
from matplotlib import rcParams     #包含了绘图时的可配置参数

rcParams['font.family'] = rcParams['font.sans-serif'] = 'SimHei'

ax = plt.figure(figsize=(10,5)).add_subplot()   #创建新的窗口和子图,这里给窗口设置了大小

ax.set_ylim(0,120)
ax.set_xlim(0,60)   #设置了x和y轴的范围

x1 = [5 , 15 , 25 , 35 , 45]
x2 = [8 , 18 , 28 , 38 , 48]
x3 = [11 , 21 , 31 , 41 , 51]
#以上三组是每一个每一个柱子中心点的横坐标
#如果出现了各个柱子之间重叠的情况,可以调整这三个组之间的间距
#下面设置柱子宽度的时候,如果宽度和x之间的距离相同,每一个组之间的柱子就没有缝隙

y1 = [25 , 29 , 66 , 24 , 67]
y2 = [66 , 25 , 87 , 57 , 28]
y3 = [12 , 56 , 90 , 68 , 35]
#以上三组是每一个柱子的数据

rects1 = ax.bar(x1 , y1 , facecolor = "red" , width = 3 , label = 'A')
rects2 = ax.bar(x2 , y2 , facecolor = "green" , width = 3 , label = 'B')
rects3 = ax.bar(x3 , y3 , facecolor = "blue" , width = 3 , label = 'C')
#以上三组进行了绘图,参数分别是指:柱子的中心坐标,柱子高度,柱子颜色,柱子宽度,以及柱子的图例名称

ax.set_xticks(x2)   #让x2,也就是每一组中中间的那个柱子和x轴坐标对其
ax.set_xticklabels(('A1' , 'A2' , 'A3' , 'A4' , 'A5'))      #每一组的标签

ax.legend()     #显示图例

def label(ax , rects):          #给每一个柱子上添加数字
    for rect in rects :     #遍历每一个柱子
        height = rect.get_height()      #获取柱子的高度
        ax.text(rect.get_x() - 0.05 + rect.get_width()/2.0 , height + 5 , str(height) , rotation = 90)
        #ax.text()在子图中添加文本,第一个参数是计算每一个文本的x轴位置,在起始位置+每一个柱子宽度的1/2再-0.05,即在每一个柱子的中心偏左
        #下一个就是文本的y轴位置,即在每一个柱子的高度上加5
        #第三个就是输入的内容,即每一个柱子的高度的具体字符
        #最后一个就是把文字旋转90度

label(ax , rects1)
label(ax , rects2)
label(ax , rects3)
#调用三次label函数,进行赋值

plt.show()

效果:

二、折线图与散点图

当我们有大量数据或者想要观察趋势的时候,我们就可以绘制一个散点图或者折线图:

import matplotlib.pyplot as plt     #主要进行绘图的模块
from matplotlib import rcParams     #包含了绘图时的可配置参数
import math , random

def drawPlotPro(ax) :
    xs = [i / 100 for i in range(1500)]     #生成一个列表,里面包含1500个数据点,且每一个数据点是i/100
    ys = [10 * math.sin(x) for x in xs]     #对于列表xs中的每一个数据,我们进行10 * math.sin(x),来生成一个正弦波
    #上面这两个分别就是每一个点的x和y坐标

    ax.plot(xs , ys , "red" , label = "A")      #使用ax.plot绘制折线图,前两个是每一个点的xy坐标,第二个是颜色,然后是图例标签
    ys = list(range(-18 , 18))      #生成一个列表,里面是从-18到17的序列
    random.shuffle(ys)      #打乱他
    
    ax.scatter(range(16) , ys[:16] , c = "blue")    #ax.scatter()绘制散点图,参数第一个是x轴坐标,第二个是y轴坐标,第三个是颜色
    ax.plot(range(16) , ys[:16] , "blue" , label = "B")     #ax.plot()绘制折线图
    
    ax.legend()     #显示图例
    
    ax.set_xticks(range(16))    #x轴坐标是0,1,2...15的地方加刻度
    ax.set_xticklabels(range(16))   #刻度的标签

ax = plt.figure(figsize=(10,4) , dpi=100).add_subplot()     #视窗的大小,以及分辨率(清晰度)
drawPlotPro(ax)     #调用ax
plt.show()

效果:

三、绘制饼图

import matplotlib.pyplot as plt     #主要进行绘图的模块
from matplotlib import rcParams     #包含了绘图时的可配置参数

def DrawPiePro(ax) :
    lbs = ('A' , 'B' , 'C' , 'D')   #饼图各个块的标签
    sectors = [25 , 20 , 50 , 5]    #每一块的占比
    expl = [0 , 0.1 , 0 , 0]    #每一块的凸显程度
    ax.pie(x = sectors , labels = lbs , explode = expl , autopct = '%.2f' , shadow = True , labeldistance = 1.1 , pctdistance = 0.6 , startangle = 90)
    #ax.pie()绘制饼图,参数分别是:每一块的占比,凸显程度,显示百分比,保留两位小数,增加阴影效果,标签和饼图的距离(大于1就是向外),百分比标签和饼图的距离,以及绘制的起点位置,90就是正上方
    ax.set_title("pie sample")      #饼图标题
    
    
ax = plt.figure().add_subplot()     #创建窗口和子图
DrawPiePro(ax)
plt.show()

效果:

四、雷达图

1、简单雷达图

import matplotlib.pyplot as plt     #主要进行绘图的模块
from matplotlib import rcParams     #处理汉字用

def DrawRadar(ax) :
    pi = 3.1415926
    labels = ["语文" , "数学" , "英语" , "物理" , "化学" , "地理"]      #六个属性的名称
    attrNum = len(labels)   #属性的种类,也就是属性的个数,此处是6
    data = [120 , 110 , 110 , 70 , 88 , 90]     #各个属性的数值
    angles = [2 * pi * i / attrNum for i in range(attrNum)]     #以弧度为单位的六个属性对应的六个半径的角度
    angles2 = [x * 180 / pi for x in angles]    #这个是角度
    ax.set_ylim(0 , 150)    #半径的范围
    ax.set_thetagrids(angles2 , labels , fontproperties = "SimHei")     #绘制这六个半径,用角度制,以及各个属性的名称,和字体
    ax.fill(angles , data  , facecolor = 'g' , alpha = 0.25)    #把围起来的区域填充,用data数据,颜色是绿色,并设置了透明度

rcParams['font.family'] = rcParams['font.sans-serif'] = 'SimHei'    #处理汉字
ax = plt.figure().add_subplot(projection = "polar")     #生成视窗和极坐标的子图

DrawRadar(ax)
plt.show()

效果:

2、多层雷达图

import matplotlib.pyplot as plt  # 主要进行绘图的模块
from matplotlib import rcParams  # 处理汉字用


rcParams['font.family'] = rcParams['font.sans-serif'] = 'SimHei'  # 处理汉字
pi = 3.1415926
names = ['张三', '李四', '王五']
labels = ["语文", "数学", "英语", "物理", "化学", "地理"]  # 六个属性的名称
attrNum = len(labels)  # 属性的种类,也就是属性的个数,此处是6
data = [[120, 125, 100], [130, 140, 130], [110, 100, 120], [70, 80, 90], [67, 79, 87],[90, 100, 97]]  # 各个属性的数值,第一个就是三个人各自的语文成绩

angles = [2 * pi * i / attrNum for i in range(attrNum)]  # 以弧度为单位的六个属性对应的六个半径的角度
angles2 = [x * 180 / pi for x in angles]  # 这个是角度

ax = plt.figure().add_subplot(projection="polar")  # 生成视窗和极坐标的子图
ax.fill(angles, data, alpha=0.25)  # 把围起来的区域填充,用data数据,并设置了透明度
ax.set_ylim(0, 150)  # 半径的范围
ax.set_thetagrids(angles2, labels)  # 绘制这六个半径,用角度制,以及各个属性的名称

ax.legend(names, loc=(0.95, 0.9))   #添加图例,以及位置


plt.show()

效果:

五、总和

在我们能绘制如此之多的图形后,我们可能需要在一个面板上就看到所有的数据们也就是把这些数据放在一个窗口上:

fig = plt.figure(figsize = (8,8))   #创建视窗

ax = fig.add_subplot(2,2,1)     #添加子图1,即饼图,2,2,1的意思是划分处一个2x2的子图,并放在第一处(就是左上角)
DrawPiePro(ax)

ax = fig.add_subplot(2,2,2 , projection = "polar")    #添加子图2
DrawRadar(ax)

ax = plt.subplot2grid((2,2) , (1,0) , colspan=2)    #第二个参数1,0是指第一行,第零列,就是左下角的位置,第三个参数就是这个子图跨越两列
drawPlotPro(ax)

plt.figtext(0.05 , 0.05 , 'subplot sample')     #在图形窗口添加文本

plt.show()

当然这个要结合上面的各个我们自己创建的函数,我们把他们结合起来:

import matplotlib.pyplot as plt  # 主要进行绘图的模块
from matplotlib import rcParams  # 处理汉字用
import math, random


def drawPlotPro(ax):
    xs = [i / 100 for i in range(1500)]  # 生成一个列表,里面包含1500个数据点,且每一个数据点是i/100
    ys = [10 * math.sin(x) for x in xs]  # 对于列表xs中的每一个数据,我们进行10 * math.sin(x),来生成一个正弦波
    # 上面这两个分别就是每一个点的x和y坐标

    ax.plot(xs, ys, "red", label="A")  # 使用ax.plot绘制折线图,前两个是每一个点的xy坐标,第二个是颜色,然后是图例标签
    ys = list(range(-18, 18))  # 生成一个列表,里面是从-18到17的序列
    random.shuffle(ys)  # 打乱他

    ax.scatter(range(16), ys[:16], c="blue")  # ax.scatter()绘制散点图,参数第一个是x轴坐标,第二个是y轴坐标,第三个是颜色
    ax.plot(range(16), ys[:16], "blue", label="B")  # ax.plot()绘制折线图

    ax.legend()  # 显示图例

    ax.set_xticks(range(16))  # x轴坐标是0,1,2...15的地方加刻度
    ax.set_xticklabels(range(16))  # 刻度的标签


#-------------------------------------------------------------------------------


def DrawPiePro(ax) :
    lbs = ('A' , 'B' , 'C' , 'D')   #饼图各个块的标签
    sectors = [25 , 20 , 50 , 5]    #每一块的占比
    expl = [0 , 0.1 , 0 , 0]    #每一块的凸显程度
    ax.pie(x = sectors , labels = lbs , explode = expl , autopct = '%.2f' , shadow = True , labeldistance = 1.1 , pctdistance = 0.6 , startangle = 90)
    #ax.pie()绘制饼图,参数分别是:每一块的占比,凸显程度,显示百分比,保留两位小数,增加阴影效果,标签和饼图的距离(大于1就是向外),百分比标签和饼图的距离,以及绘制的起点位置,90就是正上方
    ax.set_title("pie sample")      #饼图标题


#-------------------------------------------------------------------------------


def DrawRadar(ax) :
    pi = 3.1415926
    labels = ["语文" , "数学" , "英语" , "物理" , "化学" , "地理"]      #六个属性的名称
    attrNum = len(labels)   #属性的种类,也就是属性的个数,此处是6
    data = [120 , 110 , 110 , 70 , 88 , 90]     #各个属性的数值
    angles = [2 * pi * i / attrNum for i in range(attrNum)]     #以弧度为单位的六个属性对应的六个半径的角度
    angles2 = [x * 180 / pi for x in angles]    #这个是角度
    ax.set_ylim(0 , 150)    #半径的范围
    ax.set_thetagrids(angles2 , labels , fontproperties = "SimHei")     #绘制这六个半径,用角度制,以及各个属性的名称,和字体
    ax.fill(angles , data  , facecolor = 'g' , alpha = 0.25)    #把围起来的区域填充,用data数据,颜色是绿色,并设置了透明度


#-------------------------------------------------------------------------------


fig = plt.figure(figsize = (8,8))   #创建视窗

ax = fig.add_subplot(2,2,1)     #添加子图1,即饼图,2,2,1的意思是划分处一个2x2的子图,并放在第一处(就是左上角)
DrawPiePro(ax)

ax = fig.add_subplot(2,2,2 , projection = "polar")    #添加子图2
DrawRadar(ax)

ax = plt.subplot2grid((2,2) , (1,0) , colspan=2)    #第二个参数1,0是指第一行,第零列,就是左下角的位置,第三个参数就是这个子图跨越两列
drawPlotPro(ax)

plt.figtext(0.05 , 0.05 , 'subplot sample')     #在图形窗口添加文本

plt.show()

效果:

以上就是matplotlib数据展示的全部内容:)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2333939.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL 面经

1、什么是 MySQL? MySQL 是一个开源的关系型数据库,现在隶属于 Oracle 公司。是我们国内使用频率最高的一种数据库,我本地安装的是比较新的 8.0 版本。 1.1 怎么删除/创建一张表? 可以使用 DROP TABLE 来删除表,使用…

贪心算法 day08(加油站+单调递增的数字+坏了的计算机)

目录 1.加油站 2.单调递增的数字 3.坏了的计算器 1.加油站 链接:. - 力扣(LeetCode) 思路: gas[index] - cost[index],ret 表示的是在i位置开始循环时剩余的油量 a到达的最大路径假设是f那么我们可以得出 a b …

String类基本使用

文章目录 1. String类的理解和创建对象2. 创建String对象的两种方式3. 两种创建String对象的区别4. 测试5. 字符串的特性6. String 类的常见方法 1. String类的理解和创建对象 String 对象用于保存字符串,也就是一组字符序列字符串常量对象是用双引号括起的字符序列…

华为机试—火车进站

题目 火车站一共有 n 辆火车需要入站,每辆火车有一个编号,编号为 1 到 n。 同时,也有火车需要出站,由于火车站进出共享一个轨道,所以后入站的火车需要先出站。换句话说,对于某一辆火车,只有在它…

Python数组(array)学习之旅:数据结构的奇妙冒险

Python数组学习之旅:数据结构的奇妙冒险 第一天:初识数组的惊喜 阳光透过窗帘缝隙洒进李明的房间,照亮了他桌上摊开的笔记本和笔记本电脑。作为一名刚刚转行的金融分析师,李明已经坚持学习Python编程一个月了。他的眼睛因为昨晚熬夜编程而微微发红,但脸上却挂着期待的微…

spark-core编程2

Key-Value类型: foldByKey 当分区内计算规则和分区间计算规则相同时,aggregateByKey 就可以简化为 foldByKey combineByKey 最通用的对 key-value 型 rdd 进行聚集操作的聚集函数(aggregation function)。类似于aggregate()&…

AIDD-人工智能药物设计-大语言模型在医学领域的革命性应用

Nat. Rev. Bioeng. | 大语言模型在医学领域的革命性应用 大型语言模型(LLMs),如 ChatGPT,因其对人类语言的理解与生成能力而备受关注。尽管越来越多研究探索其在临床诊断辅助、医学教育等任务中的应用,但关于其发展、…

Windows 系统中安装 Git 并配置 GitHub 账户

由于电脑重装系统,重新配置了git. 以下是在 Windows 系统中安装 Git 并配置 GitHub 账户的详细步骤: 1. 安装 Git 访问 Git 官网下载页面下载 Windows 版本的 Git 安装程序运行安装程序,使用默认选项即可 2. 配置 Git 用户信息 打开命令…

QQ风格客服聊天窗口

QQ风格客服聊天窗口 展示引入方式 展示 引入方式 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title&g…

MCU刷写——Hex文件格式详解及Python代码

工作之余来写写关于MCU的Bootloader刷写的相关知识,以免忘记。今天就来聊聊Hex这种文件的格式,我是分享人M哥,目前从事车载控制器的软件开发及测试工作。 学习过程中如有任何疑问,可底下评论! 如果觉得文章内容在工作学习中有帮助到你,麻烦点赞收藏评论+关注走一波!感谢…

汇舟问卷:国外问卷调查技巧有哪些,具体该怎么操作

大家好&#xff0c;我是汇舟问卷&#xff0c;今天咱们就聊聊国外问卷答题的技巧和操作步骤&#xff0c;保你听完立马能上手&#xff01; 一、答题前先创建人设 1&#xff0c;进题时先瞄两眼问题&#xff0c;快速判断问卷主题&#xff0c;再定人设。比如遇到奶粉问卷&#xff…

C++标识符:检查是否和保留字冲突

1. 基础知识 最基本的要求&#xff1a; 字母、数字、下划线组成&#xff0c; 并且不能是数字开头。 禁忌1&#xff1a; C 关键字不能用做标识符。 它们是&#xff1a; alignas alignof asm auto bool break case catch char char16_t char32_t class const constexpr const_…

《Python星球日记》第27天:Seaborn 可视化

名人说&#xff1a;路漫漫其修远兮&#xff0c;吾将上下而求索。—— 屈原《离骚》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 专栏&#xff1a;《Python星球日记》&#xff0c;限时特价订阅中ing 目录 一、Seabor…

自动驾驶技术-相机_IMU时空标定

自动驾驶技术-相机_IMU时空标定 时间延迟 时间延迟 参考链接1、2 相机主要分为全局和卷帘快门相机&#xff0c;从触发到成像的过程包括&#xff1a;复位时间、AE()曝光时间、读出时间 全局快门如下图所示 卷帘快门如下图所示 相机录制视频时&#xff0c;为了保持固定频率&am…

”插入排序“”选择排序“

文章目录 插入排序1. 直接插入排序(O(n^2))举例1&#xff1a;举例2&#xff1a;直插排序的"代码"直插排序的“时间复杂度” 2. 希尔排序(O(n^1.3))方法一方法二(时间复杂度更优) 选择排序堆排序直接选择排序 我们学过冒泡排序&#xff0c;堆排序等等。&#xff08;回…

Python深度学习基础——卷积神经网络(CNN)(PyTorch)

CNN原理 从DNN到CNN 卷积层与汇聚 深度神经网络DNN中&#xff0c;相邻层的所有神经元之间都有连接&#xff0c;这叫全连接&#xff1b;卷积神经网络 CNN 中&#xff0c;新增了卷积层&#xff08;Convolution&#xff09;与汇聚&#xff08;Pooling&#xff09;。DNN 的全连接…

MTK7628基于原厂的mtk-openwrt-sdk-20160324-8f8e4f1e.tar.bz2 源代码包,配置成单网口模式的方法

一、配置. 在SDK工程下&#xff0c;运行make kernel_menuconfig&#xff0c;如下图所示&#xff1a; Ralink Module --->选上“One Port Only”&#xff0c;如下图所示&#xff1a; 如果P0网口实现WAN口&#xff0c;就配置成W/LLLL,否则就配置成LLLL/W. 二、修改网口的原代…

艾伦·图灵:计算机科学与人工智能之父

名人说&#xff1a;路漫漫其修远兮&#xff0c;吾将上下而求索。—— 屈原《离骚》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 艾伦图灵&#xff1a;计算机科学与人工智能之父 一、天才的诞生与早期生涯 1912年6月…

策略模式实现 Bean 注入时怎么知道具体注入的是哪个 Bean?

Autowire Resource 的区别 1.来源不同&#xff1a;其中 Autowire 是 Spring2.5 定义的注解&#xff0c;而 Resource 是 Java 定义的注解 2.依赖查找的顺序不同&#xff1a; 依赖注入的功能&#xff0c;是通过先在 Spring IoC 容器中查找对象&#xff0c;再将对象注入引入到当…

React九案例中

代码下载 地图找房模块 顶部导航栏 封装NavHeader组件实现城市选择&#xff0c;地图找房页面的复用&#xff0c;在 components 目录中创建组件 NavHeader&#xff0c;把之前城市列表写过的样式复制到 NavHeader.scss 下&#xff0c;在该组件中封装 antd-mobile 组件库中的 N…