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

主要点标记有: 

markerdescriptionmarkerdescription
"."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',即自动地寻找最合适的位置,其余值含义如下表:

valuelocation
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.参考资料

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值