fig,ax=plt.subplots(2,2),其中参数分别代表子图的行数和列数,一共有2x2个图像。函数返回一个figure图像和一个子图ax的array列表。
这是由于matplotlib文件夹内没有中文字体包导致的,实际上函数包本身是支持中文的,常见解决方案是拷贝字体文件到matplotlib中,不过我感觉太麻烦,找到了另外的方式,
frompylabimportmplmpl.rcParams['font.sans-serif']=['FangSong']#指定默认字体mpl.rcParams['axes.unicode_minus']=False#解决保存图像是负号'-'显示为方块的问题加上这三行代码指定一下字体就行了(实际上最后一行可以不加)
anaconda字体路径在:/anaconda2/lib/python2.7/site-packages/matplotlib/mpl-data/font/ttf
1.axes列表中包含各个子图句柄
#3x3子图fig,axes=plt.subplots(3,3)#子图间距设定fig.subplots_adjust(hspace=0.3,wspace=0.3)#在分别绘制各个子图fori,axinenumerate(axes.flat):pass2.每个子图句柄需要单独生成
#画布fig=plt.figure()#添加子图ax=fig.add_subplot(211)pass#添加子图ax2=fig.add_subplot(212)pass3.使用plt包命名空间代指多个子图句柄
【注】这种方法的句柄含在plt中,与上面的ax的方法属性并不相同,下面会详解
#添加子图plt.subplot(311)pass#添加子图plt.subplot(312)pass#添加子图plt.subplot(313)pass二、绘图功能【注】使用ax代指子图方法1、2的句柄,plt代指方法3中的命名空间。坐标生成:
#一维坐标生成x=np.linspace(0,10,100)#二维网格生成u=np.linspace(-1,1,100)x,y=np.meshgrid(u,u)坐标轴标签:
xlabel="True:{0},Pred:{1}".format(cls_true[i],cls_pred[i])xlabel="y"ax.set_xlabel(xlabel)ax.set_ylabel(ylabel)plt.xlabel('x')plt.ylabel('y')坐标轴刻度:
ax.set_xticks([])ax.set_yticks([])plt.xticks(range(len(x)),['a','b','c','d','e','f'])plt.yticks(range(1,8,2))坐标网格:
#横纵坐标单位长度统一plt.axis('equal')#网格plt.grid(True)#网格ax.grid(True)图表标题:
plt.title('SecondDerivative')对数坐标:
'''对数坐标'''plt.semilogx(x,y)#对x取对数plt.semilogy(x,y)#对y取对数plt.loglog(x,y)#同时取对数绘图:
atan2(a,b)是4象限反正切,它的取值不仅取决于正切值a/b,还取决于点(b,a)落入哪个象限:当点(b,a)落入第一象限时,atan2(a,b)的范围是0~pi/2;当点(b,a)落入第二象限时,atan2(a,b)的范围是pi/2~pi;当点(b,a)落入第三象限时,atan2(a,b)的范围是-pi~-pi/2;当点(b,a)落入第四象限时,atan2(a,b)的范围是-pi/2~0
而atan(a/b)仅仅根据正切值为a/b求出对应的角度(可以看作仅仅是2象限反正切):当a/b>0时,atan(a/b)取值范围是0~pi/2;当a/b<0时,atan(a/b)取值范围是-pi/2~0
故atan2(a,b)=atan(a/b)仅仅发生在点(b,a)落入第一象限(b>0,a>0)或第四象限(b>0,a0,故atan(a/b)取值范围是0~pi/2,2atan(a/b)的取值范围是0~pi,而此时atan2(a,b)的范围是-pi~-pi/2,很显然,atan2(a,b)=2atan(a/b)
举个最简单的例子,a=1,b=-1,则atan(a/b)=atan(-1)=-pi/4,而atan2(a,b)=3*pi/4
#定义子图区域left,width=0.1,0.65bottom,height=0.1,0.65bottom_h=left_h=left+width+0.02rect_scatter=[left,bottom,width,height]rect_histx=[left,bottom_h,width,0.2]rect_histy=[left_h,bottom,0.2,height]plt.figure(1,figsize=(6,6))
#需要传入[左边起始位置,下边起始位置,宽,高]#根据子图区域来生成子图axScatter=plt.axes(rect_scatter)axHistx=plt.axes(rect_histx)axHisty=plt.axes(rect_histy)
frommpl_toolkits.mplot3dimportAxes3D
ax=fig.add_subplot(111,projection='3d')
ax.plot()绘制3维线
ax.plot_surface绘制三维网格(面)
#ax.plot绘制的是3维线,ax.plot_surface绘制的是三维网格(也就是面)