python matplotlib库笔记

来源:互联网 发布:京东淘宝那个货真价实 编辑:程序博客网 时间:2024/06/14 09:41

matplotlib官方网站:http://matplotlib.org/gallery.html

plot函数

import numpy as npimport matplotlib.pyplot as pltt=np.arange(0,4,0.1)plt.plot(t,t,color='red',linestyle='-',marker='*',linewidth=3,label='Line1')plt.plot(t,t**2,color='green',linestyle='--',marker='o',linewidth=1,label='Line2')plt.legend(loc='upper left')plt.show()

处理中文字体:
方法1:
x=np.arange(0,np.pi,0.01)plt.plot(x,np.sin(x))#只修改局部的字体plt.xlabel('x轴',fontproperties='SimHei',fontsize=20)plt.ylabel('y轴',fontproperties='SimHei',fontsize=20)plt.show()
方法2:
#修改全局字体matplotlib.rcParams['font.family']='SimHei'matplotlib.rcParams['font.size']=20x=np.arange(0,np.pi,0.01)plt.plot(x,np.sin(x))plt.xlabel('x轴')plt.ylabel('y轴')plt.show()


annotate实例(使用箭头添加注释):
x=np.arange(0,5,0.01)plt.subplot(121)plt.plot(x,x)#xy为要注释的点,xytext注释文字的坐标,arrorwrops为箭头的属性plt.annotate('x=1',xy=(3,3),xytext=(4,2.7),             arrowprops=dict())plt.subplot(122)plt.plot(x,x)#shrink可以使得箭头不指向点,以0.1的比例缩短箭头plt.annotate('x=1',xy=(3,3),xytext=(4,2.7),             arrowprops=dict(facecolor='black',shrink=0.1,width=2))plt.show()

绘制扇形图:
import numpy as npimport matplotlib.pyplot as pltimport matplotliblabels=['a','b','c','d']#百分比sizes=[15,30,45,10]#0.1是扇形块偏离的比例explode=(0,0.1,0,0)#shadow是指是否产生阴影,startangle是指开始绘制扇形图的起始角度plt.pie(sizes,explode=explode,labels=labels,autopct='%.1f',        shadow=False,startangle=90)#x轴和y轴相等,产生扇形图的平面效果plt.axis('equal')plt.show()




使用面向对象的方式调用绘图函数:
#subplots函数返回figure对象和2*2的axes对象(array形式)fig,ax=plt.subplots(2,2)ax[0,0].plot([0,1],[0,1])ax[0,1].plot(np.arange(12),np.arange(12),marker='o')ax[1,0].hist(np.random.randn(100),bins=50,color='k',alpha=0.5)ax[1,1].pie([20,30,50],labels=['a','b','c'],autopct='%.1f',shadow=False)plt.show()

绘图小技巧

import matplotlib.pyplot as pltimport numpy as npx=np.linspace(-1,2,10)y1=xl1,=plt.plot(x,y1,color='r',linewidth=1,linestyle='-')#移动坐标轴#获得图的上下左右框线ax=plt.gca()#上部和右部框线消失ax.spines['right'].set_color('none')ax.spines['top'].set_color('none')#底部框线为x轴,左框线为y轴ax.xaxis.set_ticks_position('bottom')ax.yaxis.set_ticks_position('left')#y轴移动(向左或向右)与x轴(向上或向下)相交于(0,0)点ax.spines['bottom'].set_position(('data',0))ax.spines['left'].set_position(('data',0))#描点(1,1)x0=1y0=x0#画点(x0,y0),点大小为20plt.scatter(x0,y0,s=20,color='b')plt.plot([x0,x0],[y0,0],'k--',linewidth=2.5)#xycoords='data'在xy指定的点上,xytext=(+30,-30),textcoords='offset points'相对于点的xy偏移值plt.annotate('(%d,%d)'%(x0,y0),xy=(x0,y0),xycoords='data',xytext=(+30,-30),textcoords='offset points',             fontsize=16,arrowprops=dict(arrowstyle='->',connectionstyle='arc3,rad=.2'))#在(-1,1)添加注释plt.text(-1,1,r'$y=x$',fontdict={'size':14,'color':'y'})#设置图注y2=2*x+1l2,=plt.plot(x,y2,color='g')#best是指找一个不覆盖数据的合适位置放置图注plt.legend(handles=[l1,l2],labels=['l1','l2'],loc='best')plt.show()





散点图的绘制

import matplotlib.pyplot as pltimport numpy as npn=1024#随机生成平均值为0,方差为1的n个数x=np.random.normal(0,1,n)y=np.random.normal(0,1,n)#颜色生成函数t=np.arctan2(x,y)#绘制散点图,透明度为50%plt.scatter(x,y,s=75,c=t,alpha=0.5)plt.xlim(-1.5,1.5)plt.ylim(-1.5,1.5)#将x,y轴标签去掉plt.xticks(())plt.yticks(())plt.show()




直方图与条形图的区别:
  • 条形图是用条形的长度表示各类别频数的多少,其宽度(表示类别)则是固定的;
    直方图是用面积表示各组频数的多少,矩形的高度表示每一组的频数或频率,宽度则表示各组的组距,因此其高度与宽度均有意义。
  • 由于分组数据具有连续性,直方图的各矩形通常是连续排列,而条形图则是分开排列。
  • 条形图主要用于展示分类数据,而直方图则主要用于展示数据型数据。

绘制直方图:
#bins是划分的区域个数(根据最小值和最大值的区间等分),normed是纵坐标的含义,0表示个数,1表示概率plt.hist(np.random.normal(100,20,100),bins=10,normed=1,         histtype='stepfilled',facecolor='b',alpha=0.75)plt.show()

绘制条形图

import matplotlib.pyplot as pltimport numpy as npn=12x=np.arange(n)#生成0.5~1的n个数y1=np.random.uniform(0.5,1,n)y2=np.random.uniform(0.5,1,n)#设置柱状图的颜色plt.bar(x,y1,facecolor='#9999ff',edgecolor='white')plt.bar(x,-y2,facecolor='#ff9999',edgecolor='white')#zip函数可以用于x,y1数组同时赋值for xx,yy in zip(x,y1):    #居中于条柱,top指位于条柱边缘线的下方,bottom位于条柱边缘线的上方    plt.text(xx,yy,'%.2f'%yy,ha='center',va='bottom')for xx,yy in zip(x,y2):    plt.text(xx,-yy,'-%.2f'%yy,ha='center',va='top')plt.xlim(-1,12)plt.xticks(())plt.ylim(-1.5,1.5)plt.yticks(())plt.show()



绘制等高线图

import matplotlib.pyplot as pltimport numpy as npdef f(x,y):    return (1-x/2+x**5+y**3)*np.exp(-x**2-y**2)n=256x=np.linspace(-3,3,n)y=np.linspace(-3,3,n)X,Y=np.meshgrid(x,y)#填充等高线,分成10部分(0是2部分,1是3部分...),cmap指color map,每一个指=值对应颜色地图的某个值plt.contourf(X,Y,f(X,Y),8,alpha=0.75,cmap=plt.cm.hot)#绘制等高线,分成10部分c=plt.contour(X,Y,f(X,Y),8,colors='k',linewidth=0.5)#在等高线上标数据,嵌在等高线上plt.clabel(c,inline=True,fontsize=10)plt.show()





绘制3D图形

import matplotlib.pyplot as pltimport numpy as npfrom mpl_toolkits.mplot3d import Axes3Dfig=plt.figure()#创建一个3D的图像区域ax=Axes3D(fig)x=np.arange(-4,4,0.25)y=np.arange(-4,4,0.25)X,Y=np.meshgrid(x,y)Z=np.sin(np.sqrt(X**2+Y**2))#绘制三维图像,横轴生成数据点的间隔为1,纵轴为1,颜色地图为彩虹ax.plot_surface(X,Y,Z,rstride=1,cstride=1,cmap=plt.get_cmap('rainbow'))#填充等高线,zdir='z'平面垂直xoy平面,zdir='x'平面垂直yoz平面,offset位于轴-2处ax.contourf(X,Y,Z,zdir='z',offset=-2,cmap=plt.get_cmap('rainbow'))ax.set_zlim(-2,2)plt.show()






子图的显示与排版的方法

方法一:

import matplotlib.pyplot as pltfig, axes = plt.subplots(2, 2)# 调整图像之间的间距,height和widthfig.subplots_adjust(hspace=1, wspace=2)axes[0, 0].plot([0, 1], [0, 1])axes[0, 1].plot([0, 1], [0, 2])axes[1, 0].plot([0, 1], [0, 3])axes[1, 1].plot([0, 2], [0, 6])plt.show()




方法2:

import matplotlib.pyplot as pltimport matplotlib.gridspec as gridspec#生成3×3的网格结构gs=gridspec.GridSpec(3,3)ax1=plt.subplot(gs[0,:])ax2=plt.subplot(gs[1,:2])ax3=plt.subplot(gs[1:,2])ax4=plt.subplot(gs[2,0])ax5=plt.subplot(gs[2,1])#自动调整图像外部边缘plt.tight_layout()plt.show()



方法三:

import matplotlib.pyplot as plt#3×3的网格结构从(0,0)位起始位置,span为跨度,向右占3个单位,向下占1个单位ax1=plt.subplot2grid((3,3),(0,0),colspan=3,rowspan=1)ax1.plot([0,1],[0,1])ax1.set_title('ax1')ax2=plt.subplot2grid((3,3),(1,0),colspan=1,rowspan=2)ax3=plt.subplot2grid((3,3),(1,1),colspan=1,rowspan=2)ax4=plt.subplot2grid((3,3),(1,2),colspan=1,rowspan=2)#自动调整图像外部边缘plt.tight_layout()plt.show()




产生图中图效果

import matplotlib.pyplot as pltimport numpy as npplt.plot([0,1],[0,1])#left=0.6,bottom=0.2,width=0.25,height=0.25产生绘图区域plt.axes([0.6,0.2,0.25,0.25])plt.plot([0,1],[0,1])plt.xlabel('x')plt.ylabel('y')plt.title('1')plt.show()






设置双坐标轴

import matplotlib.pyplot as pltimport numpy as npx=np.arange(0,10,0.1)y1=x**2y2=2*x+1ax1=plt.subplot(111)#设置次y坐标轴ax2=ax1.twinx()ax1.plot(x,y1,'r-')ax2.plot(x,y2,'b--')ax1.set_xlabel('x')ax1.set_ylabel("y1",color='r')ax2.set_ylabel('y2',color='b')plt.show()




原创粉丝点击