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

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MIT S6081 2024 Lab 1 | Operating System | Notes

目录 安装与下载 实验1 开始我们的实验 sleep&#xff08;简单&#xff09; pingpong&#xff08;简单&#xff09; primes (中等)/(困难) find&#xff08;中等&#xff09; xargs&#xff08;中等&#xff09; finally Reference I. Tools Debian 或 Ubuntu Arch…

【Java】mac安装Java17(JDK17)

文章目录 下载java17一、安装二、环境变量 下载java17 官网下载&#xff1a;https://www.oracle.com/java/technologies/downloads 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、安装 直接安装后&#xff0c;安装完后目录会存放在下面目录下 /…

【USB-HID】“自动化键盘“

这里写目录标题 【USB-HID】"自动化键盘"1. 前言2. 框架3. 实现3.1 模拟键盘按键输入 【USB-HID】“自动化键盘” 1. 前言 最近从朋友那了解了一种"自动化键盘"&#xff0c;能够通过上位机录制按键脚本&#xff0c;然后执行脚本&#xff0c;实现物理键盘…

XXE靶机漏洞复现通关

1.扫描XXE靶机的ip地址 将kali虚拟机和XXE靶机部署在同一局域网中&#xff0c;都采用NAT网络模式 搭建好后在kali终端中进行扫描XXE靶机的ip arp-scan -l 根据常识我们可以推断192.168.27.153为靶机的ip地址 2.访问靶机页面并扫描附录 进入页面后我们可以打开御剑扫描网页中…

leetcode 36.有效的数独

1.题目要求: 2.题目步骤: 写好判断函数 3.题目代码: class Solution { public:bool isvalid(vector<vector<char>>& board,char num,int row,int col){//先找左下标int leftrow row - 1;while(leftrow > 0){if(board[leftrow][col] num){return fals…

在C#中测试比较目录的不同方法以查看它们有哪些共同的文件

C# 中的示例“比较目录以查看它们有哪些共同的文件”使用Directory.GetFiles获取两个目录中的文件。它对文件进行排序&#xff0c;并比较两个排序后的列表以查看哪些文件位于第一个目录中、第二个目录中或两个目录中。有关其工作原理的详细信息&#xff0c;请参阅该示例。 Kur…

【Java基础面试题019】什么是Java中的不可变类?

回答重点 不可变类是指在创建后无法被修改的类。一旦对象被创建&#xff0c;它的所有属性都不能被更改。这种类的实例在整个生命周期内保持不变。 关键特征&#xff1a; 声明类为final&#xff0c;防止子类继承类的所有字段都是private和final&#xff0c;确保它们在初始化后…

【论文笔记】Editing Models with Task Arithmetic

&#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&#xff0c;为生民立命&#xff0c;为往圣继绝学&#xff0c;为万世开太平。 基本信息 标题: Editing Models with Task…

HarmonyOS(71) 自定义事件分发之TouchTestStrategy使用说明

TouchTestStrategy 1、前言2、TouchTestStrategy简介2.1、TouchTestStrategy枚举类型简介2.2、TouchTestStrategy.DEFAULT效果1.3、TouchTestStrategy.FORWARD_COMPETITION效果2.3、TouchTestStrategy.FORWARD效果3、参考资料1、前言 本文根据官方文档自定义事件分发整理而来,…

【附源码】Electron Windows桌面壁纸开发中的 CommonJS 和 ES Module 引入问题以及 Webpack 如何处理这种兼容

背景 在尝试让 ChatGPT 自动开发一个桌面壁纸更改的功能时&#xff0c;发现引入了一个 wallpaper 库&#xff0c;这个库的入口文件是 index.js&#xff0c;但是 package.json 文件下的 type:"module"&#xff0c;这样造成了无论你使用 import from 还是 require&…

WebGIS城市停水及影响范围可视化实践

目录 前言 一、相关信息介绍 1、停水信息的来源 2、停水包含的相关信息 二、功能简介 1、基础小区的整理 2、停水计划的管理 三、WebGIS空间可视化 1、使用到的组件 2、停水计划的展示 3、影响小区的展示 4、实际效果 四、总结 前言 城市停水&#xff0c;一个看似…

群落生态学研究进展】Hmsc包开展单物种和多物种分析的技术细节及Hmsc包的实际应用

联合物种分布模型&#xff08;Joint Species Distribution Modelling&#xff0c;JSDM&#xff09;在生态学领域&#xff0c;特别是群落生态学中发展最为迅速&#xff0c;它在分析和解读群落生态数据的革命性和独特视角使其受到广大国内外学者的关注。在学界不同研究团队研发出…

docker 部署 redis

docker 部署 redis 1. 下载 redis 镜像 # docker images | grep redis bitnami/redis 7.2.4-debian-11-r5 45de196aef7e 10 months ago 95.2MB2. docker-compose 部署 version: "3" services:redis:image: bitnami/redis:7.2.4-debian-11-…

Windows环境 (Ubuntu 24.04.1 LTS ) 国内镜像,用apt-get命令安装RabbitMQ,java代码样例

一、环境 Windows11 WSL(Ubuntu 24.04.1) 二、思路 1 用Windows中的Ubuntu安装RabbitMQ&#xff0c;贴近Linux的线上环境&#xff1b; 2 RabbitMQ用erlang语言编写的&#xff0c;先安装erlang的运行环境&#xff1b; 2 用Linux的apt-get命令安装&#xff0c;解决软件依赖…

Linux网络应用——高级IO

目录 1. I/O 的重新理解 2. 五种 I/O 模型 ① 阻塞 && 非阻塞 ② 同步 I/O && 异步 I/O 3. select 模型 ① 非阻塞 I/O ② select 接口介绍 ③ 代码实现 ④ select 模型的优缺点 4. poll 模型 ① poll 接口介绍 ② 代码实现 ③ 与 select 模型的…

Dcoker Redis哨兵模式集群介绍与搭建 故障转移 分布式 Java客户端连接

介绍 Redis 哨兵模式&#xff08;Sentinel&#xff09;是 Redis 集群的高可用解决方案&#xff0c;它主要用于监控 Redis 主从复制架构中的主节点和从节点的状态&#xff0c;并提供故障转移和通知功能。通过 Redis 哨兵模式&#xff0c;可以保证 Redis 服务的高可用性和自动故…

使用 Wireshark 和 Lua 脚本解析通讯报文

在复杂的网络环境中&#xff0c;Wireshark 凭借其强大的捕获和显示功能&#xff0c;成为协议分析不可或缺的工具。然而&#xff0c;面对众多未被内置支持的协议或需要扩展解析的场景&#xff0c;Lua 脚本的引入为Wireshark 提供了极大的灵活性和可扩展性。本文将详细介绍如何使…

宝塔SSL证书申请失败,报错:申请SSL证书错误 module ‘OpenSSL.crypto‘ has no attribute ‘sign‘(已解决)

刚安装宝塔申请SSL就报错&#xff1a;申请SSL证书错误 module OpenSSL.crypto has no attribute sign 面板、插件版本&#xff1a;9.2.0 系统版本&#xff1a;Alibaba Cloud Linux 3.2104 LTS 问题&#xff1a;申请SSL证书错误 module OpenSSL.crypto has no attribute sign…

自动驾驶控制与规划——Project 2: 车辆横向控制

目录 零、任务介绍一、环境配置二、算法三、代码实现四、效果展示 零、任务介绍 补全src/ros-bridge/carla_shenlan_projects/carla_shenlan_stanley_pid_controller/src/stanley_controller.cpp中的TODO部分。 一、环境配置 上一次作业中没有配置docker使用gpu&#xff0c;…

双内核架构 Xenomai 4 安装教程

Xenomai 4是一种双内核架构, 继承了Xenomai系列的特点&#xff0c;通过在Linux内核中嵌入一个辅助核心&#xff08;companion core&#xff09;&#xff0c;来提供实时能力。这个辅助核心专门处理那些需要极低且有界响应时间的任务。 本文将在官网教程(https://evlproject.org/…