Python:Matplotlib详细使用

1.Matplotlib简介

Matplotlib是python数据分析三剑客之一,是一个功能强大且非常流行的Python数据可视化库。Matplotlib可用于绘制折线图(line plot)、散点图(scatter plot)、条形图(bar plot)、直方图(histogram plot)、饼图(pie plot)等,同时也支持部分3D绘图功能。正所谓“一图胜千言”,通过图像,可以更加清晰、直观地展示数据,从而有利于数据分析。

2.Matplotlib图像主要组成部分

Matplotlib图像的主要组成部分包括:

  • 画布(figure):画布是所有绘制元素的顶级容器,可将其视为一张白纸,供我们后期创作;

  • 轴域(axes):轴域是图中绘制数据的矩形区域,每个画布可以包含一个或多个轴,轴提供坐标系;

  • 标题(title):标题是一个文本元素,通常用于提供所绘图像的信息;

  • 轴标签(x label,y label):标签是为 x 轴和 y 轴提供描述的文本元素,用于提供单位或其他相关信息;

  • 图例(legend):图例用于指示图中不同元素的含义;

  • 网格线(grid):网格线用于帮助读者对齐刻度线,从而更准确地读取数据点的位置和值。

  • 3.绘图示例

    3.1 创建空白画布

    plt.figure(num=None,figsize=None,dpi=None,facecolor=None,edgecolor=None,frameon=True) 

  • num:画布编号,默认值为1;

  • figsize:指定画布宽高,默认为(6.4,4.8);

  • dpi:图像分辨率,单位为pixel/inch,默认值为80;

  • facecolor:背景颜色,默认值为白色;

  • edgecolor:边框颜色;

  • frameon:是否显示边框,默认显示。

  • import numpy as np
    from matplotlib import pyplot as plt
    fig=plt.figure(figsize=(8,6),dpi=100,facecolor='c') # 创建一个尺寸为(8,6),分辨率为100dpi,背景色为青色的画布
    plt.show()

    3.2 折线图

    折线图(line plot)将数据中相邻的点用直线连接起来,当点分布得很密时,连接起来的线变得光滑。下面展示了y=x^2(x∈[-5,5])的三个图像,左图在x∈[-5,5]中均匀地分布了5个点,点与点之间用直线连接起来,可以很明显地看出折线图的属性;右图在x∈[-5,5]中均匀地分布了20个点,此时折线变得较为光滑,但细看还是可以看出折线的痕迹;下图在x∈[-5,5]中均匀地分布了200个点,此时折线变得非常光滑,肉眼已无法观察到折线的痕迹。

    plt.plot(x,y,*args)

    主要设置参数有:color(c,颜色)、linestyle(ls,线型)、marker(点标记)、linewidth(lw,线宽),markersize(标记大小)、markerfacecolor(mfc,标记填充色),label(标签,与图例配合使用)、alpha(透明度,取值为0-1,0为完全透明,1为完全不透明)等。

    其中主要颜色有:

    r(red)

    红色

    b(blue)

    蓝色

    g(green)

    绿色

    y(yellow)

    黄色

    k(black)

    黑色

    w(white)

    白色

    c(cyan)

    青色

    m(magenta)

    洋红色 

    此外,还支持十六进制的RGB色号,如:

    主要线型有:

    solid

    dashed

    -.

    dashdot

    :

    dotted

    主要点标记有: 

    marker description marker description
    "." point "," pixel
    "o" circle "v" triangle_down
    "^" triangle_up "<" triangle_left
    ">" triangle_right "1" tri_down
    "2" tri_up "3" tri_left
    "4" tri_right "8" octagon
    "s" square "p" pentagon
    "P" plus (filled) "*" star
    "h" hexagon1 "H" hexagon2
    "+" plus "x" x
    "X" x (filled) "D" diamond
    "d" thin_diamond "|" vline
    "_" hline

    其样式如下: 

    一个简单的例子:

    fig=plt.figure() # 全部用默认值
    x=[1,2,3,4,5]
    y=[2,1,3,5,4]
    plt.plot(x,y,color='#A7D676',linestyle='--',marker='*',markerfacecolor='b',markersize=15)
    plt.show() # 每次调用plt.show()方法后,会将所有绘图元素释放出来,所以对元素的修改应该在该方法之前

    基本的元素有了,我们还希望再给图增加点元素,使得读者能见图知意,如增加标题,轴标签等。

    添加标题:

    plt.title(label,*args)

    常用参数包括:color(c,颜色)、fontsize(标题字号)。

    添加轴标签:

    plt.xlabel(xlabel,*args) 、plt.ylabel(ylabel,*args)

    常用参数包括:color、fontsize、loc(标签位置,x轴标签位置一般为'center'或'right',y轴标签位置一般为'center'或'top')、rotation(旋转角度)等。

    添加网格线:

    plt.grid(*args)

    常用参数包括:color、linestyle、axis('x'、'y'或'both',默认为'both',即希望哪个轴显示网格线)、alpha。

    x=np.linspace(0,2*np.pi,200) # 点密集后,折线图会变得光滑
    y=np.sin(x)
    fig=plt.figure()
    plt.plot(x,y,linestyle='-',color='c')
    plt.title('Line Plot',fontsize=18)
    plt.xlabel('x',loc='right')
    plt.ylabel('y',loc='top',rotation=0)
    plt.grid(axis='y',linestyle='--',color='k',alpha=0.5) # 只显示y轴网格线
    plt.show()

    3.3 双线图

    对于同一个轴域,可以通过多次调用plt.plot(x,y,*args),在坐标系中绘制多条线,再通过plt.show()展示图像,双线图只是一个示例。

    为了使得读者清晰理解每条线的意义,可以为每条线添加label(标签),再配合图例说明。

    添加图例:

    plt.legend(*args)

    常用参数为:loc,默认值为'best',即自动地寻找最合适的位置,其余值含义如下表:

    value location
    0 'best
    1 'upper right'
    2 'upper left'
    3 'lower left'
    4 'lower right'
    5 'right'
    6 'center left'
    7 'center right'
    8 'lower center'
    9 'upper center'
    10 'center'

    同时,还可以使用plt.xticks(ticks,labels,*args)、plt.yticks(ticks,labels,*args)来改变刻度显示,其中ticks表示要显示的刻度值 ,labels表示对应刻度需要显示的标签。如,我们希望刻度[1,2,3]对应的位置显示['Alice','Bob','Clark']。

    x=np.linspace(0,2*np.pi,200)
    y1=np.sin(x)
    y2=np.cos(x)
    fig=plt.figure()
    plt.plot(x,y1,linestyle='-',color='c',label='y=sin(x)') # 该线标记为y=sin(x)
    plt.plot(x,y2,linestyle='--',color='m',label='y=cos(x)') # 该线标记为y=cos(x)
    plt.title('y=sin(x) and y=cos(x)')
    plt.xlabel('x',loc='right')
    plt.ylabel('y',loc='top',rotation=0)
    x_ticks=np.linspace(0,2*np.pi,5)
    x_ticks_labels=['0','π/2','π','3π/2','2π']
    y_ticks=np.linspace(-1,1,5)
    plt.xticks(x_ticks,x_ticks_labels,c='g')
    plt.yticks(y_ticks)
    plt.legend(loc='best')
    plt.grid(linestyle='--',axis='y',alpha=0.5)
    plt.show()

    3.4 双y轴图

    Matplotlib是一个非常强大的绘图库,语法非常灵活,但是这种灵活有时也会给我们带来很大的困扰,因为我们总是希望事情按照某一个固定的模版来进行,但Matplotlib往往达成同一目的的路径有很多条,比如颜色形参可以写成color,也可以写成c。之前的例子中我们总是在创建一个画布之后用plt方法绘图,这其实是在这个画布上隐式生成了一个绘图区域。对于简单图像而言,这种方法较为简便,但绘制复杂图像时,则需要用到轴域(ax)概念才可以更加精准地画出我们需要的图像。如:

    fig=plt.figure()
    ax=fig.add_axes([left,bottom,width,height]) # 向画布上添加一个轴域,四个参数的取值均为0-1,
    ax.plot()                                   # left、bottom表示轴域偏离画布左侧、底部的百分比
    plt.show()                                  # width、height表示轴域宽度、高度占画布的比例

    或:

    fig,ax=plt.subplots() # 用该方法返回一个画布对象、一个轴域对象
    ax.plot()
    plt.show()

    此外还有其他创建方法,这方面只有多看、多练。

    x1=np.linspace(0,10,200)
    y1=np.exp(x1)
    x2=np.linspace(0.001,10,200)
    y2=np.log(x2)
    fig=plt.figure()
    ax1=fig.add_subplot()
    ax1.plot(x1,y1,linestyle='-.',color='b',alpha=0.8,label='y=e^x') 
    ax1.tick_params(axis='y',labelcolor='b') # 将对应的y轴刻度标签改为对应颜色
    ax2=ax1.twinx()
    ax2.plot(x2,y2,linestyle=':',color='g',alpha=0.8,label='y=ln(x)')
    ax2.tick_params(axis='y',labelcolor='g')  # 将对应的y轴刻度标签改为对应颜色
    plt.title('y=e^x and y=ln(x)')
    plt.show()

    3.5 多子图

    多子图可由以下两种方式绘制。

    方式一:

    fig=plt.figure(facecolor='lightblue')
    
    x1=np.linspace(0,2*np.pi,200)
    y1=np.sin(x1)
    plt.subplot(2,2,1) # 一共2×2个子图,此为第一个
    plt.plot(x1,y1,linestyle='-',color='b',label='y=sin(x)')
    plt.title('y=sin(x)')
    plt.xlabel('x',loc='right')
    plt.ylabel('y',loc='top')
    plt.grid(alpha=0.8)
    x_ticks=np.linspace(0,2*np.pi,5)
    x_labels=['0','π/2','π','3π/2','2π']
    plt.xticks(x_ticks,x_labels)
    plt.yticks(np.linspace(-1,1,5))
    
    x2=np.linspace(0,2*np.pi,200)
    y2=np.cos(x2)
    plt.subplot(2,2,2) # 一共2×2个子图,此为第二个
    plt.plot(x2,y2,linestyle='--',color='g',label='y=cos(x)')
    plt.title('y=cos(x)')
    plt.xlabel('x',loc='right')
    plt.ylabel('y',loc='top')
    plt.grid(axis='y',alpha=0.5)
    plt.xticks(x_ticks,x_labels)
    plt.yticks(np.linspace(-1,1,5))
    
    x3=np.linspace(0,10,200)
    y3=np.exp(x3)
    plt.subplot(2,2,3) # 一共2×2个子图,此为第三个
    plt.plot(x3,y3,linestyle='-.',color='orange',alpha=0.7,label='y=e^x')
    plt.title('y=e^x')
    plt.xlabel('x',loc='right')
    plt.ylabel('y',loc='top')
    
    x4=np.linspace(0.01,10,200)
    y4=np.log10(x4)
    plt.subplot(2,2,4) # 一共2×2个子图,此为第四个
    plt.plot(x4,y4,linestyle=':',color='r',alpha=0.6,label='y=lg(x)')
    plt.title('y=lg(x)')
    plt.xlabel('x',loc='right')
    plt.ylabel('y',loc='top')
    
    plt.tight_layout() # 自动调整布局(紧凑布局)
    plt.show()

    方式二:

    fig,ax=plt.subplots(2,2) # 这种创建方式会返回fig、ax两个对象,其中ax是一个轴域列表,形状与子图的形状一致
    ax1,ax2,ax3,ax4=ax.flatten() # 可以将列表展平后逐个取出
    
    x1=np.linspace(0,2*np.pi,200)
    y1=np.sin(x1)
    ax1.plot(x1,y1,label='y=sin(x)')
    ax1.set_title('y=sin(x)')
    
    x2=np.linspace(0,2*np.pi,200)
    y2=np.cos(x2)
    ax2.plot(x2,y2,label='y=cos(x)')
    ax2.set_title('y=cos(x)')
    
    x3=np.linspace(0,10,200)
    y3=np.exp(x3)
    ax3.plot(x3,y3,label='y=e^x')
    ax3.set_title('y=e^x')
    
    x4=np.linspace(-5,5,200)
    y4=np.power(x4,2)
    ax4.plot(x4,y4,label='y=x^2')
    ax4.set_title('y=x^2')
    
    plt.tight_layout()
    plt.show()

    3.6 多轴域图

    fig=plt.figure()
    x1=np.linspace(0,2*np.pi,200)
    y1=np.sin(x1)
    plt.plot(x1,y1)
    plt.title('y=sin(x)')
    x2=np.linspace(0,2*np.pi,200)
    y2=np.cos(x2)
    ax2=fig.add_axes([0.58,0.55,0.25,0.25])
    ax2.set_title('y=cos(x)') # 用轴域绘图时设置标签等方法一般在前面加set
    ax2.plot(x2,y2)           # 如ax.set_xticks()、ax.set_title()等
    plt.show()

     

    3.7 条形图 

    plt.bar(x,y,*args)

    常用参数为:color(可以以列表的形式指定每一个柱子的颜色)、width(宽度,取值为0-1)、bottom(可以理解为y坐标偏移量)。

    x=np.arange(1,6)
    y=np.random.randint(60,100,5)
    fig=plt.figure()
    plt.bar(x,y,color=['c','m','r','g','b'],width=0.5,alpha=0.5)
    plt.title('Revenue-Month Plot')
    plt.xlabel('month',loc='right')
    plt.ylabel('revenue',loc='top')
    plt.show()

    3.8 簇状条形图

    在条形图的基础上,可以将x坐标与宽度参数配合起来,绘制簇状条形图。

    x=np.arange(1,6)
    x_labels=['Jan','Feb','Mar','Apr','May']
    data_Tom=np.random.randint(60,100,size=5)
    data_Jack=np.random.randint(60,100,size=5)
    data_Wilson=np.random.randint(60,100,size=5)
    fig=plt.figure()
    width=0.3
    plt.bar(x-width,data_Tom,color='#D98481',width=width,label='Tom')
    plt.bar(x,data_Jack,color='#91B5A9',width=width,label='Jack')
    plt.bar(x+width,data_Wilson,color='#EDCA7F',width=width,label='Wilson')
    plt.title('Revenue-Month Plot')
    plt.xlabel('Month',loc='right')
    plt.ylabel('Revenue',loc='top')
    plt.xticks(x,x_labels)
    plt.legend(loc='best')
    plt.show()

     

    3.9 堆叠图

    在条形图的基础上, 可以将y坐标与bottom参数配合起来,绘制堆叠图。

    x=np.arange(4)
    x_labels=['Tom','Jack','Mike','John']
    data_Jan=np.random.randint(60,100,size=4)
    data_Feb=np.random.randint(60,100,size=4)
    data_Mar=np.random.randint(60,100,size=4)
    fig=plt.figure()
    plt.bar(x,data_Jan,color='#D98481',label='Jan')
    plt.bar(x,data_Feb,color='#91B5A9',bottom=data_Jan,label='Feb')
    plt.bar(x,data_Mar,color='#EDCA7F',bottom=data_Jan+data_Feb,label='Mar')
    plt.title('Revenue-Staff Plot')
    plt.xticks(x,x_labels)
    plt.xlabel('Staff',loc='right')
    plt.ylabel('Revenue',loc='top')
    plt.legend(loc='best')
    plt.show()

    3.10 横向条形图

    横向条形图与普通条形图的主要差别在于方向不同。

    x=np.arange(5)
    y=np.random.randint(50,100,size=5)
    fig=plt.figure()
    plt.barh(x,y,color=['b','g','r','c','m'],alpha=0.5)
    plt.title('Horizontal Bar Plot')
    plt.xlabel('y',loc='right')
    plt.ylabel('x',loc='top')
    plt.show()

    3.11 面积图

    面积图与折线图类似,但面积图会将折线与x轴之间的区域填充颜色。

    plt.stackplot(x,y,*args)

    常用参数有:color、alpha。 

    x=np.arange(10)
    y=np.random.randint(50,100,size=10)
    fig=plt.figure()
    plt.stackplot(x,y,color='c',alpha=0.5)
    plt.title('Area Plot')
    plt.xlabel('x',loc='right')
    plt.ylabel('y',loc='top')
    plt.show()

     

    3.12 填充

    填充可以将两条线之间的区域填充上颜色,在绘制曲线包络等场景下可发挥作用。

    plt.fill_between(x,y1,y2,*args)

    常用参数有:color、alpha等。

    x=np.linspace(0,100,2000)
    y=np.sin(x)*np.exp(-0.1*x)
    y1=np.exp(-0.1*x)
    y2=-np.exp(-0.1*x)
    fig=plt.figure()
    plt.plot(x,y,color='c')
    plt.title('y=sin(x)·e^(-0.1x)')
    plt.xlabel('x',loc='right')
    plt.ylabel('y',loc='top')
    plt.fill_between(x,y1,y2,color='y',alpha=0.4)
    plt.show()

     

    3.13 散点图 

    散点图与折线图的区别在于,散点图不会将点与点之间用直线连接起来。

    plt.scatter(x,y,*args)

    常用参数有:color、marker(标记样式)、linewidth(线宽)、edgecolor(边缘颜色)、s(点大小)、alpha等。

    x=np.arange(10)
    y=np.random.randn(10)
    fig=plt.figure()
    plt.scatter(x,y,color='lightblue',marker='*',linewidth=0.5,edgecolor='b',s=100)
    plt.title('Scatter Plot')
    plt.xlabel('x',loc='right')
    plt.ylabel('y',loc='top')
    plt.show()

    3.14 泡泡图

    在散点图的基础上,可以通过生成一个随机数组来指定每个点的大小,同时点的颜色的指定可以用color、cmap(颜色映射)这两个参数来配合,其中color参数为一个数组,cmap为一种指定的配色方案,在这种方式下,color数组中的每个数值被映射为一种颜色,根据不同的数值可以为每个点指定不同的颜色。这种情况下绘制出来的散点图形似一个个泡泡,故称泡泡图(bubble plot)。

    cmap
    viridis
    rainbow
    Blues
    summer
    autumn
    cool
    ···
    x=np.random.rand(100)
    y=np.random.randn(100)
    s=np.random.rand(100) # 随机指定点的大小
    c=np.random.rand(100) # 随机指定点颜色的映射值
    fig=plt.figure()
    plt.scatter(x,y,s=s*500,c=c,cmap='rainbow',alpha=0.8)
    plt.title('Bubble Plot')
    plt.xlabel('x',loc='right')
    plt.ylabel('y',loc='top')
    plt.show()

    3.15 直方图

    直方图用来表示数据的分布情况,直方图中每一个柱子的高度表示分布在该组中的数据的个数。

    plt.hist(data,*args)

    常用参数包括:color、bins(分组,可以为一个整数,即要把数据分为几组;也可以为一个列表,如[10,20,30,40],则会把数据分为[10,20)、[20,30)、[30,40)三组,直方图统计分布在这三组中的数据个数)。

    data=np.random.randn(1000)
    fig=plt.figure()
    plt.hist(data,bins=10,color='lightblue')
    plt.title('Histogram Plot')
    plt.show()

     

    3.16 饼图

    饼图(pie plot)用来表示每个数据在其组内的占比。

    plt.pie(data,*args)

    常用参数有:color、labels(每个扇形的标签)、explode(取值为0-1,用来指定每个扇形突出的程度)、shadow(阴影,增加立体感)、autopct(显示百分比)、pctdistance(百分比距离圆心的程度,一般取值为0-1)、labeldistance(标签距离圆心的程度,一般取值为一大于1的值)、radius(扇形半径)、wedgeprops(楔子的属性,为一字典,包括了edgecolor、width等属性)。

    data=np.random.randint(50,100,size=5)
    labels=['Alice','Bob','Tom','Jack','Mike']
    explode=[0,0,0.1,0,0]
    fig=plt.figure()
    plt.pie(data,labels=labels,colors=['#B1D5E4','#DB7777','#5EB376','#929FC8','#DC7F68'],
            autopct='%1.1f%%',shadow=True,explode=explode,pctdistance=0.5,labeldistance=1.1,
            wedgeprops={'edgecolor':'w','width':1})
    # autopct='%1.1f%%'表示百分比保留一位小数,若autopct='%1.2f%%'则百分比保留两位小数
    plt.title('Pie Plot')
    plt.show()

     

    3.17 环形图

    在饼图的基础上,可以通过改变楔子的宽度获得环形图,也叫甜甜圈图(donut chart)。

    data=np.random.randint(50,100,size=5)
    labels=['Alice','Tom','Jack','Mike','Tony']
    fig=plt.figure()
    plt.pie(data,labels=labels,colors=['#B1D5E4','#DB7777','#5EB376','#929FC8','#DC7F68'],
            autopct='%1.1f%%',wedgeprops={'width':0.5,'edgecolor':'w'},pctdistance=0.7)
    plt.title('Donut Chart')
    plt.show()

     

    3.18 嵌套饼图

    在饼图的基础上,通过控制饼图半径(radius)、环形图的楔子宽度(width),使得在同一画布上展示一个饼图+一个环形图。

    data1=np.random.randint(50,100,size=5)
    data2=np.random.randint(50,100,size=5)
    fig=plt.figure()
    plt.pie(data1,colors=['#B1D5E4','#DB7777','#5EB376','#929FC8','#DC7F68'],
            wedgeprops={'width':0.5,'edgecolor':'w'})
    plt.pie(data2,colors=['#7DBFB4','#E1BE54','#B2516B','#2E8391','#CDA4BF'],
            radius=0.4)
    plt.show()

    3.19 箱型图

    箱型图(box plot)是数据分析领域常用的一种统计图,用于描述数据的分散程度,箱型图可以直观地反映出一组数据的最大值、最小值、中位数、及上下四分位数。

    plt(data,*args)

    data=np.random.randn(100)
    fig=plt.figure()
    plt.boxplot(data)
    plt.title('Box Plot')
    plt.show()

     

    3.20 等高线图

    等高线(countour lines)图可以将三维数据使用二维的方法可视化。z=f(x,y),即二维平面上的每一个点(x,y)对应一个值z,等高线即二维坐标平面上高度相等的相邻各点所连成的闭合曲线。

    绘制等高线图有plt.contour(x,y,z,*args)、plt.contourf(x,y,z,*args)两个函数,差别在于plt.contourf会对等高线间的区域进行填充。

    常用参数有:levels(可以为一整数,表示需要显示的等高线条数;也可以为一列表,表示需要显示的等高线的数值)、cmap。

    为进一步完善等高线图,plt.contour(x,y,z,*args)、plt.contourf(x,y,z,*args)函数常与plt.clabel(contour,*args)函数配合,为每一条等高线添加数值标签,该函数的常用参数有inline(取值为'True'或'False',表示是否将数值标签嵌入等高线内显示)、fontsize。

    x=np.linspace(-5,5,200)
    y=np.linspace(-5,5,200)
    X,Y=np.meshgrid(x,y)
    Z=X**2+Y**2
    fig=plt.figure()
    contour=plt.contour(X,Y,Z,levels=10,cmap='rainbow')
    plt.clabel(contour,inline='True',fontsize=8)
    plt.xlabel('x')
    plt.ylabel('y')
    plt.title('Contour Plot')
    plt.show()

    对于使用颜色映射(cmap)的图,还可以调用plt.colorbar()方法显示数值-颜色映射关系。 

    x=np.linspace(-5,5,200)
    y=np.linspace(-5,5,200)
    X,Y=np.meshgrid(x,y)
    Z=np.sin(np.sqrt(X**2+Y**2))
    fig=plt.figure()
    plt.contourf(X,Y,Z,cmap='viridis')
    plt.colorbar()
    plt.xlabel('x')
    plt.ylabel('y')
    plt.title('Contourf Plot')
    plt.show()

     

    3.21 极坐标图

    Matplotlib支持极坐标系,只需在创建子图时将projection指定为'polar'。

    fig=plt.figure()
    ax=fig.add_subplot(projection='polar')
    x=np.linspace(0,2*np.pi,5)
    y=np.random.randint(60,100,size=5)
    ax.plot(x,y)
    plt.title('Polar Plot')
    plt.show()

    3.22 雷达图

    在极坐标图的基础上,只需将起始点和终点连接起来,再将折线与极点间的区域填充上颜色,就可以得到雷达图。

    fig=plt.figure()
    ax=fig.add_subplot(projection='polar')
    x_0=np.linspace(0,2*np.pi,7)
    x=np.hstack((x_0,x_0[0])) # 这一步是为了将起始点和终止点连接起来
    y_0=np.full(shape=7,fill_value=100)
    y=np.hstack((y_0,y_0[0])) # 这一步是为了将起始点和终止点连接起来
    ax.plot(x,y,color='#7DBFB4')
    ax.fill_between(x,y,0,color='lightblue',alpha=0.8)
    x_ticks=np.linspace(0,5*np.pi/3,6)
    x_labels=['power','experience','speed','defence','service','skills']
    ax.set_xticks(x_ticks,x_labels,color='#B2516B')
    ax.set_yticks([]) # 关闭y轴刻度
    plt.title('Ma Long')
    plt.show()

     

    3.23 文本注释

    为进一步增加图像的可读性,可为图像添加文字注释。

    plt.text(x,y,s,*args),(x,y)表示文本显示的坐标,s表示文本内容。

    常用参数包括:ha(文本的水平对齐方式,一般为'center'、'left'、'right')、va(文本的垂直对齐方式,一般为'center'、'top'、'bottom')、fontsize。

    x=np.arange(1,6)
    x_label=['Alex','Bruce','Derrick','Eric','Frank']
    color=['b','g','c','m','r']
    y=np.random.randint(60,100,size=5)
    fig=plt.figure()
    plt.bar(x,y,color=color,alpha=0.5)
    plt.xticks(x,x_label)
    plt.title('Bar Plot')
    for (a,b) in zip(x,y):
        plt.text(x=a,y=b,s=b,ha='center',va='bottom')
    plt.show()

    3.24 标注

    与文本注释的区别在于,该函数可以绘制一个箭头指向被标注的对象。

    plt.annotate(text,xy,xytext,arrowprops,*args),text表示需要显示的文本,xy为一个元组,表示箭头指向的对象的坐标,xytext为一个元组,表示文本放置的坐标,arrowprops (箭头的属性,为一字典,包括了color、width、headwidth等属性)。

    x=np.linspace(0,2*np.pi,200)
    y=np.sin(x)
    fig=plt.figure()
    plt.plot(x,y,c='lightblue')
    plt.xlim([-1,8])
    plt.ylim([-2,2])
    # plt.xlim([low,high])、plt.ylim([low,high])表示显示的x、y轴的范围
    # 以上函数等效于plt.axis([-1,8,-2,2])
    plt.xlabel('x',loc='right')
    plt.ylabel('y',loc='top')
    plt.title('y=sin(x)')
    plt.annotate(text='maximum',xy=(np.pi/2,1),c='#DB7777',xytext=(0.5+np.pi/2,1.5),arrowprops={'width':0.5,'headwidth':3,'color':'#2E8391'})
    plt.annotate(text='minimum',xy=(3*np.pi/2,-1),c='#DB7777',xytext=(0.5+3*np.pi/2,-1.5),arrowprops={'width':0.5,'headwidth':3,'color':'#7DBFB4'})
    plt.show()

    4.参考资料

  • 《千锋教育python数据分析教程200集,Python数据分析师入门必备视频》
  • Python学习之-matplotlib详解-CSDN博客
  • Matplotlib | 一文搞定Matplotlib从入门到实战演练!-CSDN博客
  • 作者:深圳市睿傲电子

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python:Matplotlib详细使用

    发表回复