一、简单折线图
二、常用基本函数:plt.xticks,plt.yticks,ply.xlim,plt.ylim,plt.xlabel,plt.ylabel,plt.title,plt.legend等
三、折线图函数plt.plot()的参数介绍及详解
四、调整坐标轴:plt.spines[]
五、文本标注:plt.text()
六、文本箭头注释:plt.annotate()
七、绘图的填充:plt.fill_between()
八、归纳练习
九、面对对象画图
一、简单折线图
1、调用包:
import numpy as np
import matplotlib.pyplot as plt
2、正常显示中文及负号:(经常用到,否则无法显示中文及负号,经常用到,建议记住代码)
plt.rcParams['font.family'] = 'SimHei' # 正常显示中文
plt.rcParams['axes.unicode_minus'] = False # 正常显示负号
3、简单折线图:以横轴坐标值为x,纵轴坐标值为sin(x),颜色为红色画线
x = np.linspace(0, 10, 30) # x轴坐标值
plt.plot(x, np.sin(x),c = 'r') # 参数c为color简写,表示颜色,r为red即红色
plt.show() # 显示图像
4、常用颜色简写为:
高级配色参考网站:https://xkcd.com/color/rgb/
网站界面如下:
把#开头的复制到参数c中即可,如下:
二、常用基本函数:plt.xticks,plt.yticks,plt.xlim,plt.ylim,plt.xlabel,plt.ylabel,plt.title,plt.legend等
1、plt.xticks()、plt.yticks()分别表示横纵轴的刻度:
labels参数调整刻度为自己想要的字符或文字:
2、plt.xlim(),plt.ylim()分别表示横纵轴的刻度范围:
3、给图设置标题:plt.title(),plt.xlabel(),plt.ylabel()
4,显示图例:plt.legend()
首先要在折线图上注明label参数:
plt.legend()中loc参数可选值如下(默认为best):
best
upper right
upper left
lower left
lower right
right
center left
center right
lower center
upper center
center
5、网格线:plt.grid()
6、保存图片:plt.savefig(fname)
三、折线图函数plt.plot()的参数介绍及详解
调用方法:plt.plot(x, y, linestyle, linewidth,color,marker, markersize, markeredgecolor, markerfactcolor, label, alpha)
用法:
plt.plot(x,
np.sin(x),
color = 'b', # 线条颜色 blue
linewidth = 1, # 线条宽度
linestyle='-', # 线的类型:虚线:'--',点线:'-.',短虚线':',实线:'-'
marker='o', # 线上点的形状
markersize = 10, # 点的大小
markeredgecolor = 'r', # 点的边框颜色
markerfacecolor ='y', # 点的背景颜色
label = 'sin', # 图例
alpha = 1 ) # 透明度:0-1之间 ,默认1
plt.legend(fontsize = 15) # 显示图例
plt.show()
其中参数color可简写成c,linewidth可简写为lw,linestyle可简写为ls
四、调整坐标轴:plt.spines[]
1、去除上轴线及右边轴线:
x = np.linspace(0, 10, 30)
plt.plot(x, np.sin(x),c = '#0ffef9',label = 'sin(x)')
ax = plt.gca() # 获取当前子图 get current axes
ax.spines['right'].set_color('none') # spines中文脊柱的意思,表示图边框四条脊柱线:top,bottom,left,right
ax.spines['top'].set_color('none') # 使上轴线及右轴线颜色设置为none或‘white’
plt.show()
2、调整坐标轴为x,y直角坐标轴
x = np.linspace(0, 10, 30)
plt.plot(x, np.sin(x),c = '#0ffef9',label = 'sin(x)')
ax = plt.gca() # 获取当前子图 get current axes
ax.spines['right'].set_color('none') # spines中文脊柱的意思,表示图边框四条脊柱线:top,bottom,left,right
ax.spines['top'].set_color('none') # 使上轴线及右轴线颜色设置为none或‘white’
ax.spines['left'].set_position(('data',0)) # 调整左轴线位置到横坐标0的位置
ax.spines['bottom'].set_position(('data',0)) # 调整下轴线位置到纵坐标0的位置
plt.show()
五、文本标注:plt.text()
plt.text(x,y,s)
x表示x轴坐标值,y表示y轴坐标值 通过x,y来控制标注的位置
x = np.linspace(0, 10, 30)
plt.plot(x, np.sin(x),c = '#0ffef9',label = 'sin(x)')
# plt.text(x,y,s) x表示x轴坐标值,y表示y轴坐标值 通过x,y来控制标注的位置
plt.text(x = 1,y = 0.5,s = '这是标注',fontsize = 15,c = 'b',rotation = 20) # rotation控制文本字体角度
plt.show()
六、文本箭头注释:plt.annotate()
plt.annotate(text,xy,xytext,arrowprops)
text表示注释文本,xy表示箭头端点位置,xytext表示文本注释的位置,arrowprops控制箭头,形式为字典
x = np.linspace(0, 10, 30)
plt.plot(x, np.sin(x),c = '#0ffef9',label = 'sin(x)')
plt.annotate(text = '底点',xy = (4.65,-1),xytext = (4.2,0),
arrowprops = {'headwidth':10,'facecolor':'r'},fontsize = 15)
plt.show()
注:若未设置arrowprops参数则没有箭头显示,只有文本注释
七、绘图的填充:plt.fill_between()
x = np.linspace(0, 10, 30)
y1 = x*2
y2 = x**2+5
plt.figure(figsize = (8,5))
plt.plot(x,y1,'r',x,y2,'g') #注:可以在一个plot函数内画出多条线
plt.fill_between(x,y1,y2,facecolor = 'k',alpha = 0.2)
plt.show()
# 第一个参数表示要覆盖的左右范围,第二个参数表示覆盖的下限,第三个参数表示覆盖的上限,在这里则表示填充y1曲线和y2曲线中间的区域
八、归纳练习
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.family'] = 'SimHei' # 正常显示中文
plt.rcParams['axes.unicode_minus'] = False # 正常显示负号
x = np.linspace(-3, 3, 50)
y1 = 2*x + 1
y2 = x**2
# 创建画布并设置大小
plt.figure( figsize=(8, 5))
plt.plot(x, y1, label='linear line',marker = '+')
# zorder控制绘图顺序,值越大画的越慢,防止先画从而被后画的图挡住,如下图防止红线被图例挡住从而不清晰
plt.plot(x, y2, color='red', lw=2.0, ls='--', label='square line',zorder = 10)
plt.xlim(-4,5)
plt.ylim(-5,10)
plt.xticks(rotation = 30,fontsize = 12,c = 'k') # rotation:旋转角度
plt.yticks(rotation = 30,fontsize = 12,c = 'k')
plt.grid(True)
plt.legend(loc='upper right',edgecolor = 'none',facecolor = 'g',fontsize =13)
# 注释
plt.text(-2,-4,'这是直线',fontsize = 15,c = 'b')
plt.annotate('这是曲线',xy = (2,2),xytext = (3,-1),
arrowprops ={'headwidth':10,'facecolor':'g'},fontsize = 15,c = 'r')
# 填充
plt.fill_between(x,y1,y2,facecolor = 'g',alpha = 0.2)
plt.show()
九、面对对象画图:
在面对对象画图前,让我们来看看图像的组成:
Figure:画布,顶层级,用来容纳所有绘图元素
Axes:可以认为是figure这张画图上的子图,因为子图上一般都是坐标图,也可以愿意理解为轴域或者坐标系。
Axis:axes的下属层级,用于处理所有和坐标轴有关的元素
Tick:axis的下属层级,用来处理所有和刻度有关的元素
综上可知,画出的图像是在画布figure上显示的,axes可理解成figure上的一个子图,axis可理解成子图axes的坐标轴,tick是坐标轴axis上的刻度
我们来看看面对对象是如何画图的,其实很简单,只需要把plt改为面对自己创建的axes即可
如下:
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.family'] = 'SimHei' # 正常显示中文
plt.rcParams['axes.unicode_minus'] = False # 正常显示负号
x = np.linspace(-3, 3, 50)
y1 = 2*x + 1
y2 = x**2
# 方法一
fig = plt.figure( figsize=(8, 5)) # 创建画布并设置大小
ax = fig.add_subplot(111) # 111,表示在画布中创建一行,一列,编号为一的子图,即创建一个子图的意思
# 方法二
# fig,ax = plt.subplots(figsize =(8,5))
ax.plot(x, y1, label='linear line',marker = '+')
ax.plot(x, y2, color='red', lw=2.0, ls='--', label='square line',zorder = 10)
ax.set_xlim(-4,5)
ax.set_ylim(-5,10)
plt.xticks(rotation = 30,fontsize = 12,c = 'k') # rotation:旋转角度
plt.yticks(rotation = 30,fontsize = 12,c = 'k')
ax.grid(True)
ax.legend(loc='upper right',edgecolor = 'none',facecolor = 'g',fontsize =13)
# 注释
ax.text(-2,-4,'这是直线',fontsize = 15,c = 'b')
ax.annotate('这是曲线',xy = (2,2),xytext = (3,-1),
arrowprops ={'headwidth':10,'facecolor':'g'},fontsize = 15,c = 'r')
# 填充
ax.fill_between(x,y1,y2,facecolor = 'g',alpha = 0.2)
plt.show()