import matplotlib
%matplotlib inline
#如果输入上面一行,则会在输出结果中产生插图,而不是独立的图
import matplotlib.pyplot as plt
import numpy as np
x=np.arange(0.1,4,.01)
plt.figure(figsize=(20,10))
plt.plot(x,np.sin(x*50)/x,linewidth=3)#实线形式的曲线,默认'b-'
plt.plot(x,np.zeros(len(x)),'g--',linewidth=2)#虚线形式的绿色水平线
plt.title('Curve $y=\sin(50x)/x}$',fontsize=40,y=1.04)
plt.xlabel('$x$',fontsize=30)
plt.ylabel('$y=\sin(50x)/x$',fontsize=30)
plt.grid(True)
plt.savefig('mplsin.png')#存入文件
x=np.arange(0.,2.,.05)
plt.plot(x,np.cos(x),'r:',x,np.cos(x**2),'b.',
# x,np.cos(x**3),'g-.',
x,np.cos(x**4),'m',
linewidth=15,markersize=30
)
plt.ylim((-1.5,1.5))#确定图形的纵向空间范围
plt.title('4 curves in one figure',fontsize=30)
import scipy.stats as stats
plt.figure(figsize=(30,18))
plt.subplot(2,3,1)#2乘3的图形阵的第一个
y=50*np.exp(.004+np.cumsum(.01*np.random.randn(100)))
plt.plot(y)#默认画蓝色实线
plt.xlabel('time($\tau$)')#x轴的标签
plt.ylabel('Price',fontsize=16)#y轴的标签
plt.title('Random walk: $d\ln p_t=\mu dt+\sigma dW_t$',fontsize=16)
y=np.random.rand(5)
x=np.arange(5)
plt.subplot(2,3,2)#2乘3的图形阵的第二个
colors=['#FF0000','#FFFF00','#00FF00','#00FFFF','#0000FF']#一些颜色代码
plt.barh(x,y,height=0.5,color=colors,\
)#barh用来绘制横向条形图
y=np.random.rand(5)
y=y/sum(y)
y[y<.05]=.05
plt.subplot(2,3,3)
plt.pie(y)#饼图
plt.title('Pie plot')
z=np.random.randn(100,2)
z[:,1]=0.5*z[:,0]+np.sqrt(0.5)*z[:,1]
x=z[:,0]
y=z[:,1]
#z[:,0]是numpy中数组的一种写法,表示对一个二维数组,取该二维数组第一维中的所有数据,第二维中取第0个数据,
#直观来说,z[:,0]就是取所有行的第0个数据, z[:,1] 就是取所有行的第1个数据。
plt.subplot(2,3,4)
plt.scatter(x,y)
plt.title('Scatter plot')
plt.subplot(2,3,5)
x=np.random.randn(100)
plt.hist(x,bins=30,label='Empirical')#画直方图
xlim=plt.xlim()
ylim=plt.ylim()
pdfx=np.linspace(xlim[0],xlim[1],200)
pdfy=stats.norm.pdf(pdfx)#scipy模块中的标准正太分布密度函数
pdfy=pdfy/pdfy.max()*ylim[1]
plt.plot(pdfx,pdfy,'r-',label='PDF')
plt.ylim((ylim[0],1.2*ylim[1]))
plt.legend()#MLegend 图例就是为了帮助我们展示每个数据对应的图像名称
#pylab
#pylab 是 matplotlib 面向对象绘图库的一个接口。它的语法和 Matlab 十分相近。
#也就是说,它主要的绘图命令和 Matlab 对应的命令有相似的参数。
#plt.savefig(‘test’, dpi = 600) :将绘制的图画保存成png格式,命名为 test
#plt.ylabel(‘Grade’) : y轴的名称
#plt.axis([-1, 10, 0, 6]) : x轴起始于-1,终止于10 ,y轴起始于0,终止于6
#plt.subplot(3,2,4) : 分成3行2列,共6个绘图区域,在第4个区域绘图。排序为行优先。也可 plt.subplot(324),将逗号省略。
#各种图
#plt.plot(x,y , fmt) :绘制坐标图
#plt.boxplot(data, notch, position): 绘制箱形图
#plt.bar(left, height, width, bottom) : 绘制条形图
#plt.barh(width, bottom, left, height) : 绘制横向条形图
#plt.polar(theta, r) : 绘制极坐标图
#plt.pie(data, explode) : 绘制饼图
#plt.scatter(x, y) :绘制散点图
#plt.hist(x, bings, normed) : 绘制直方图
plt.subplot(2,3,6)
x=np.cumsum(np.random.randn(100,4),axis=0)
plt.plot(x[:,0],'b-',label='Series 1')
plt.plot(x[:,1],'g-',label='Series 2')
plt.plot(x[:,2],'r:',label='Series 3')
plt.plot(x[:,3],'h-.',label='Series 4')
plt.legend()
plt.title('Random lines')
f1=fig.add_subplot(1,2,1)
x=np.linspace(0.1,1)
#np.linspace(start,stop,num)
#num默认为50,不能是负数
#在指定的间隔内返回均匀间隔的数字。
#返回num均匀分布的样本,在[start, stop]。
f1.plot(x,stats.chi2.pdf(x,1),'-',label='$\chi^2(1)$')
f1.plot(x,stats.chi2.pdf(x,2),'-.',label='$\chi^2(2)$')
f1.plot(x,stats.chi2.pdf(x,3),'--',label='$\chi^2(3)$')
f1.plot(x,stats.chi2.pdf(x,4),':',label='$\chi^2(4)$')
f1.set_title('$\chi^2$ density functions')
f1.legend()
f2=fig.add_subplot(1,2,2)
x=np.linspace(0.01,.5,50)
f2.plot(x,stats.f.pdf(x,1,2),'-',label='$F(1,2)$')
f2.plot(x,stats.f.pdf(x,2,1),'-',label='$F(2,1)$')
f2.plot(x,stats.f.pdf(x,2,2),'-.',label='$F(2,2)$')
f2.plot(x,stats.f.pdf(x,1,1),'--',label='$F(1,1)$')
f2.plot(x,stats.f.pdf(x,1,3),':',label='$F(1,3)$')
f2.set_title('$F$ density functions')
f2.legend()
#三维曲面图
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
X=np.arange(-5,5,0.25)
Y=np.arange(-5,5,0.25)
X,Y=np.meshgrid(X,Y)#X为每行相同的矩阵,Y为X转置
Z=np.sin(np.sqrt(X**2+Y**2))
x=X.reshape(len(X)**2)#把矩阵拉长称为一个向量
y=Y.reshape(len(Y)**2)
z=Z.reshape(len(Z)**2)
fig=plt.figure()
ax=fig.gca(projection='3d')
ax.plot_trisurf(x,y,z,cmap=cm.jet,linewidth=0.3)
#matplotlib 的 figure 就是一个 单独的 figure 小窗口,
#小窗口里面还可以有更多的小图片.
z=np.linspace(-1,1,1000)
x=z*np.sin(100*z)
y=z*np.cos(100*z)
plt.figure()
plt.axes(projection='3d')
plt.plot(x,y,z,'-b')