matplotlib.pyplot是一个有命令风格的函数集合,它看起来和MATLAB很相似。每一个pyplot函数都使一副图像做出些许改变,例如创建一幅图,在图中创建一个绘图区域,在绘图区域中添加一条线等等。在matplotlib.pyplot中,各种状态通过函数调用保存起来,以便于可以随时跟踪像当前图像和绘图区域这样的东西。绘图函数是直接作用于当前axes(matplotlib中的专有名词,图形中组成部分,不是数学中的坐标系。)
import matplotlib.pyplot as plt #import matplotlib.pyplot //也可以2.基本函数
- plt.plot(x, y) --> plot函数可以接受任意个数的参数,在此处是将x和y数据代入xy坐标中
- plt.plot(x, y, 'ro', x, y1, 'g--') --> x和y用‘ro’即红色圆形来画,而x和y1则用‘g--’即绿色虚线来画,‘r-’代表红色实线,其他的g和b依此类推,‘o'是圆形的意思,’b^‘表示蓝色类似正三角形,
- ax.scatter --> 散点图
- plt.xlabel('x') --> x轴标签
- plt.ylabel('y(x)') --> y轴标签
- plt.title("Polynomial") --> 指定图形的主题名字
- plt.show() --> 显示坐标图
- plt.subplot(311) --> 该函数的第一个参数是子图的行数,第二个参数是子图的列数,第三个参数是一个从1开始的序号。另一种方式是将这3个参数结合成一个数字,如311。这样,子图将被组织成3行1列
- fig = plt.figure() --> 创建一个Matplotlib的figure对象——这是绘图组件的顶层容器
显示画图时出现的中文和负号
import matplotlib.pyplot as plt from pylab import mpl mpl.rcParams['font.sans-serif']=['SimHei'] mpl.rcParams['axes.unicode_minus']=False
画图样例
from matplotlib import pyplot as plt
colors=['r','g','b','k']
x=np.linspace(-2*np.pi,2*np.pi,500)#生成-2*pi到2*pi 含有500个数据的数组
y1=x**2
y2=np.sin(x)
y3=np.cos(x)
y4=np.log(abs(x))
f=[y1,y2,y3,y4]
ff=['$y=x^2$','$y=sin(x)$','$y=cos(x)$','$y=log(x)$']
plt.figure(figsize=(16,10))
for i in range(1,len(colors)+1):
plt.subplot(220+i)#subplot(abc)代表在a*b的画布里的第几个图
plt.plot(x,f[i-1],color=colors[i-1]);
plt.title(ff[i-1],size=18)
4.通用模板
import numpy as np
import matplotlib.pyplot as plt
#正确显示中文和负号
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
# 数据准备
x=np.linspace(-np.pi,np.pi)
y=np.sin(x)
z=np.cos(x)
# 设置画布大小
plt.figure(figsize=(12, 5))
# plot 画x与y和x与z的关系图
plt.plot(x,y,label='sin(x)',color='red', linewidth=1,marker='o',markersize=3)
plt.plot(x,z,label='cos(x)',color='blue',linewidth=1,linestyle='dashed',marker='<',markersize=3)
# 设置x轴标签、坐标轴范围,坐标轴刻度,坐标轴刻度旋转角度
plt.xlabel('x',size=14)
plt.xlim(-np.pi,np.pi)
plt.xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi],rotation=60,size=12) #
# 设置y轴标签、坐标轴范围,坐标轴刻度,坐标轴刻度旋转角度
plt.ylabel('y',size=14)
plt.ylim(-1,1)
plt.yticks([-1,-0.5,0.5,0,1],rotation=0,size=12)
#标题
plt.title('sin/cos画图',size=18)
# 紧凑布局:自动调整图形、坐标轴、标签之间的距离,对于多个子图时尤其有用。
plt.tight_layout()
# 设置显示图例,要在plt.plot 时设置 label='xxx'才能显示图例
plt.legend()
#加网格线
plt.grid(True)
# 保存图像,可以是任意后缀名,dpi设置图像清晰度
#plt.savefig('./fig1.pdf', dpi=600) #要放在plt.show()之前,否作保存的图像为空白
# 显示图像
plt.show()
5.高阶技巧:twinx/ twiny
设置两条曲线共用x轴,但不共用y轴,或者相反。从而将两个数量级差距很大的曲线画在同一幅画中。下面以sin(x)和cos(x)举例
import numpy as np
import matplotlib.pyplot as plt
x=np.linspace(0,10,num=60)
y=np.sin(x)
z=0.01*np.cos(x)-0.9
plt.figure(figsize=(12,5))
# plot 画x与y的关系图
L1,=plt.plot(x,y,label='sin(x)',color='red', linewidth=1)
plt.ylabel('y')
plt.ylim(-1,1)
plt.yticks([-1,-0.5,0,1],rotation=0)
# 设置共用x轴
plt.twinx()
# plot 画x与z的关系图
L2,=plt.plot(x,z,label='cos(x)',color='blue',linewidth=1)
plt.ylabel('z')
plt.ylim(-0.91,-0.89)
plt.yticks([-0.91,-0.905,-0.90,-0.895,-0.89],rotation=0)
plt.legend(handles=[L1,L2])
plt.xlabel('x')
plt.title('$sin(x) quad and quad cos(x)$画图')
plt.tight_layout()
plt.show()
6.使用Matplotlib创建子图



