一,matplotilb库(数学绘图库)
mat数学 plot绘图 lib库
matplotlib.pyplot(缩写mp)->python 最常用接口
mp.plot(水平坐标,垂直坐标数组)
X:[1 2 3 4]
Y:[5 6 7 8]
.mp.plot(X,Y)
代码:plot(xxx,linestyle=线型,linewidth=线宽,color=颜色)
例:
1 import numpy as np 2 import matplotlib.pyplot as mp 3 from numpy import pi 4 5 x= np.linspace(-np.pi,np.pi,1000) #线性空间划分 1000个横坐标 6 #余弦曲线坐标 7 cos_y = np.cos(x)/2 #x是一个数组 numpy的cos可以接受数组,无需遍历矢量化 8 #正弦曲线坐标 9 sin_y = np.sin(x) 10 #x水平坐标,cos_y , sin_y 垂直坐标 11 # mp.plot((x,cos_y),color=‘limegreen‘) 12 mp.plot(x,cos_y,linestyle=‘--‘,linewidth=10,color=‘black‘) 13 mp.plot(x,sin_y) 14 mp.show()
看手册功能:help(mp.plot)
设置图标范围
mp.xlim(左边界,右边界)
mp.xlim(地边界,顶边界)
功能:设置图标范围
如果设置最大值最小值,则全部填满。
显示弧度值:
mp.xticks(刻度位置数组,刻度文本数组)
mp.yticks(刻度位置数组,刻度文本数组)
刻度文本数组转义字符串写法:
[r‘$\pi$,r‘$\frac{分子}{分母}$‘,r‘$0$‘]
3/4pi = >r‘$\frac{3\pi}{4}$‘
引十字座标:
作用:拿到框线的轴
ax=mp.gca() #获取等前坐标轴
ax.spines[‘left‘].set_position((‘data‘,0)) #设置位置边框(有四边)
ax.spines[‘left‘].set_color(颜色) #设置位置边框颜色
显示图列和位置
mp.plot(...,label=r‘$y=sin(x)$‘)
mp.legend(loc=‘upper left‘)
标记一些特殊的点:
散点图(不连线)
mp.scatter(水平坐标数组,垂直坐标数组,marker=点型,s=大小,edgecolor=勾边色,faceolor=填充色,zorder=Z序)
Z序就是绘画的顺序,zorder数越大,点越晚压在线上
Matplotilb绘画顺序是线画点,再画线
图上做注释:
mp.annotate(备注文本,xy=目标位置,需要coords=目标坐标系,xytext=文本位置,Textcoords=文本坐标系,fontsize=字体大小,arrowprops=箭头属性)
例:
1 import numpy as np 2 import matplotlib.pyplot as mp 3 4 x =np.linspace(-np.pi,np.pi,1000) #线性空间划分 5 6 cos_y = np.cos(x)/2 #x是一个数组nupmy的cos可以接受数组,无需遍历矢量化 7 sin_y=np.sin(x) 8 xo=np.pi*3/4 9 yo_cos=np.cos(xo)/2 10 yo_sin = np.sin(xo) 11 12 13 # mp.xlim(x.min(),x.max()) #取最小的值做x的左边界,最大值右边界 14 # mp.ylim(sin_y.min(),sin_y.max()) 15 16 #乘上1.1,上下左右都空开距离 17 mp.xlim(x.min()*1.1,x.max()*1.1) 18 mp.ylim(sin_y.min()*1.1,sin_y.max()*1.1) 19 20 mp.xticks([ 21 -np.pi,-np.pi/2,0,np.pi/2,np.pi*3/4,np.pi], 22 [r‘$-\pi$‘,r‘$-\frac{\pi}{2}$‘,r‘$0$‘,r‘$\frac{\pi}{2}$‘,r‘$\frac{3\pi}{4}$‘,r‘$\pi$‘] 23 ) 24 mp.yticks([-1,-0.5,0,5,1]) 25 26 ax = mp.gca() 27 ax.spines[‘left‘].set_position((‘data‘,0)) 28 ax.spines[‘bottom‘].set_position((‘data‘,0)) 29 ax.spines[‘right‘].set_color(‘none‘) #设置为color=none就没有边框了 30 ax.spines[‘top‘].set_color(‘none‘) #设置为color=none就没有边框了 31 32 33 mp.scatter([xo,xo],[yo_cos,yo_sin],s=60, 34 edgecolors=‘limegreen‘,facecolor=‘white‘,zorder=10 35 ) 36 37 mp.annotate( 38 r‘$\frac{1}{2}cos(\frac{3\pi}{4})=-\frac{\sqrt{2}}{4}$‘, 39 xy=(xo,yo_cos),xycoords=‘data‘, 40 xytext=(-90,-40),textcoords=‘offset points‘, 41 fontsize=14, 42 arrowprops=dict(arrowstyle=‘->‘,connectionstyle=‘arc3,rad=.2‘)) 43 44 mp.annotate( 45 r‘$sin(\frac{3\pi}{4})=-\frac{\sqrt{2}}{2}$‘, 46 xy=(xo,yo_sin),xycoords=‘data‘, 47 xytext=(20,20),textcoords=‘offset points‘, 48 fontsize=14, 49 arrowprops=dict(arrowstyle=‘->‘, connectionstyle=‘arc3,rad=.2‘)) 50 51 52 53 54 mp.plot([xo,xo],[yo_cos,yo_sin],linestyle=‘--‘,linewidth=1,color=‘limegreen‘) 55 56 mp.plot(x,cos_y,linestyle=‘-‘,linewidth=2,color=‘dodgerblue‘,label =r‘$y=cos(x)$‘) 57 mp.plot(x,sin_y,linestyle=‘-‘,linewidth=2,color=‘orangered‘,label =r‘$y=sin(x)$‘) 58 mp.legend(loc=‘upper left‘) 59 mp.show()
==============================================以上是常用matplotilb方法=====================================================
图形对象
1.具体写法:
mp.figure(图形对象名,figsize=窗口大小,dpi=分辨率,facecolor=窗口颜色)
mp.figure()方法:
第一次调用是创建,第二次创建为再次置为当前口
mp.title()写标题
mp.title(‘XXXX‘,fontsize=20)
mp.xlabel()坐标轴的标签
mp.xlabel(标签文字,字体大小)
mp.xlabel(‘x‘,fortsize=12)
mp.tick_params()设置刻度参数
mp.tick_params(labelsize=10)
mp.grid()设置格线
mp.grid(linestyle=‘:‘)
例:
1 import numpy as np 2 import matplotlib.pyplot as mp 3 4 x= np.linspace(-np.pi,np.pi,1000) 5 cos_y = np.cos(x)/2 6 sin_y=np.sin(x) 7 8 mp.figure(‘Figuer Objecti 1‘,figsize=(6,4),dpi=120,facecolor=‘lightgray‘) 9 mp.title(‘Figure Objcet 1‘,fontsize=16) 10 11 mp.xlabel(‘x‘,fontsize=12) 12 mp.xlabel(‘y‘,fontsize=12) 13 mp.tick_params(labelsize=10) 14 mp.grid(linestyle=‘:‘) 15 16 mp.figure(‘Figuer Objecti 2‘,figsize=(6,4),dpi=120,facecolor=‘lightgray‘) 17 mp.title(‘Figure Objcet 2‘,fontsize=16) 18 19 mp.xlabel(‘x‘,fontsize=12) 20 mp.xlabel(‘y‘,fontsize=12) 21 mp.tick_params(labelsize=10) 22 mp.grid(linestyle=‘:‘) 23 24 25 mp.figure(‘Figuer Objecti 1‘) #再调用一下figuer o1,就会到1的窗口下绘画 26 mp.plot(x,cos_y,label=r‘$y=\frac{1}{2}cos(x)$‘) 27 mp.legend() 28 mp.figure(‘Figuer Objecti 2‘) #再调用一下figuer o2,就会到2的窗口下绘画 29 mp.plot(x,sin_y,label=r‘$y=sin(x)$‘) 30 mp.legend() 31 32 mp.show() #只有show针对所有,其余的函数都只针对当前对象
2.图形
1)子图
创建子图,大图里创建子图
1.缺省(默认)布局:
mp.subplot(行数,列数,图号)
例:mp.subplot(2,3,1)或者mp.subplot(231)
子图显示文字:
mp.text(对应中心位置的比例,对应中心位置的比例,图号数值,
ha=水平对其方式,va=垂直对齐方式,
size=尺寸大小,alpha=透明度)
mp.tight_layout() 紧凑 不空很多格 边距变窄
例:
1 import matplotlib.pyplot as mp 2 mp.figure(facecolor=‘lightgray‘) 3 for i in range(2): #2代表2行 4 for j in range(3): #3代表3列 5 k= i * 3+j+1 6 #mp.subplot(231) #2行3列第一张 7 mp.subplot(2,3,k) 8 mp.xticks(()) #不带刻度线 9 mp.yticks() 10 mp.text(0.5,0.5,str(k),ha=‘center‘,va=‘center‘,size=36,alpha=0.5) 11 12 mp.tight_layout() #紧凑 不空很多格 边距变窄 13 mp.show()
2.栅格布局
先建立一个栅格布局器:
import matplotlib.gridspes as mg
gs = mg.GridSpes(行数,列数) <-栅格布局器
mp.subplot(gs[行,列])
栅格布局优势:布局均匀
例:
1 import matplotlib.pyplot as mp 2 import matplotlib.gridspec as mg 3 4 5 mp.figure(facecolor=‘lightgray‘) 6 gs=mg.GridSpec(3,3) #生成栅格布局器,3行3列 九宫格 7 mp.subplot(gs[0,:2]) #gs[0,:2],0代表第0行,:2代表前两例 8 mp.xticks(()) 9 mp.yticks(()) 10 mp.text(0.5,0.5,‘1‘,ha=‘center‘,va=‘center‘,size=36,alpha=0.5) 11 12 13 mp.subplot(gs[1:,0]) 14 mp.xticks(()) 15 mp.yticks(()) 16 mp.text(0.5,0.5,‘2‘,ha=‘center‘,va=‘center‘,size=36,alpha=0.5) 17 18 19 mp.subplot(gs[2,1:]) 20 mp.xticks(()) 21 mp.yticks(()) 22 mp.text(0.5,0.5,‘3‘,ha=‘center‘,va=‘center‘,size=36,alpha=0.5) 23 24 25 mp.tight_layout() 26 mp.show()
3.自由布局
mp.axes([左下角水平坐标,左下角垂直坐标,宽度,高度])
优点:所有尺寸参数都是相对比例
缺点:同时输入几个,最后一张图能在另一张里面
例:
1 import matplotlib.pyplot as mp 2 3 mp.figure(facecolor=‘lightgray‘) 4 mp.axes([0.03,0.038,0.94,0.924]) 5 mp.xticks(()) 6 mp.yticks(()) 7 mp.text(0.5,0.5,‘1‘,ha=‘center‘,va=‘center‘,size=36,alpha=0.5) 8 9 10 mp.axes([0.63,0.076,0.31,0.308]) 11 mp.xticks(()) 12 mp.yticks(()) 13 mp.text(0.5,0.5,‘2‘,ha=‘center‘,va=‘center‘,size=36,alpha=0.5) 14 15 16 mp.show()
2)坐标刻度定位器
定位器对象=mp.xxLocator(...)
ax=mp.gca()
主刻度:ax.xaxis.set_major_locator(定位器对象)#x轴,让定位器对象帮我们定义刻度。
次刻度:ax.xaxis.set_minor_locator(定位器对象)#x轴,让定位器对象帮我们定义刻度
locators=[
‘mp.NullLocator()‘, #空定位器。不需要参数,可以被解释执行
‘mp.MaxNLocator(nbins=3,steps=[1,3,5,7,9])‘, #等分定位器。最多分n段,从后续列表中选一个等分的点
‘mp.FixedLocator(locs=[0,2,5,5,7,5,10])‘, #固定定位器。等价于直接调用xticks。
‘mp.AutoLocator()‘, #自动定位器。特点:隔间不太密也不太疏,自动匹配
‘mp.IndexLocator(offset=0.5,base=1.5)‘, #索引定位器。Offset起始点,base是隔间。
‘mp.MultipleLocator()‘, #次刻度定位器。
‘mp.LinearLocator(numticks=21)‘, #线性均分定位。如例子,等分20份。
mp.LogLocator(base=2,subs=[1.0])‘ #指数定位器。
]
例:
1 import numpy as np 2 import matplotlib.pyplot as mp 3 4 mp.figure() 5 6 locators = [ 7 ‘mp.NullLocator()‘, 8 ‘mp.MaxNLocator(nbins=3,steps=[1,3,5,7,9])‘, 9 ‘mp.FixedLocator(locs=[0,2.5,5,7.5,10])‘, 10 ‘mp.AutoLocator()‘, 11 ‘mp.IndexLocator(offset=0.5,base=1.5)‘, 12 ‘mp.MultipleLocator()‘, 13 ‘mp.LinearLocator(numticks=21)‘, 14 ‘mp.LogLocator(base=2,subs=[1.0])‘] 15 16 n_locators = len(locators) 17 18 for i, locator in enumerate(locators): 19 mp.subplot(n_locators,1,i+1) 20 mp.xlim(0,10) 21 mp.ylim(-1,1) 22 mp.yticks(()) 23 mp.xticks(()) 24 ax = mp.gca() 25 ax.spines[‘left‘].set_color(‘none‘) 26 ax.spines[‘top‘].set_color(‘none‘) 27 ax.spines[‘right‘].set_color(‘none‘) 28 ax.spines[‘bottom‘].set_position((‘data‘,0)) #底轴放中间 因为1到-1,0在中间 29 ax.xaxis.set_major_locator(eval(locator)) #eval函数解释执行 产生类的对象,主刻度执行器 30 ax.xaxis.set_minor_locator(mp.MultipleLocator(0.1))#此刻度定位 0.1为间隔 31 #上面做完但是没有图 32 mp.plot(np.arange(11),np.zeros(11),c=‘none‘) #zeros是全零 y坐标 33 mp.text(5,0.3, locator[3:], ha=‘center‘,size=12) 34 35 36 mp.tight_layout() 37 mp.show()
3.散点图
散点图的意义:
可以让一个点附带更多信息。
总是用两个坐标想,y坐标来表示。
例子:x代表身高,y代表年龄
X=np.random.normal(0, 1, n)这是正态分布规律的随机数
| | |
V V v
平均值u 标志差 n个
u=0
o=1 代表标准的正太分布
o 表示标准差 o 值越大就越集中; o值越小瘦高 , o越大越平坦。
o²方差
区域填充
mp.fill_between(水平座标数组,垂直座标数组,垂直座标终点数组,条件,color=颜色,alpha=透明度)
1 import numpy as np 2 import matplotlib.pyplot as mp 3 4 n=1000 5 x=np.linspace(0,8*np.pi,n)#线性分隔 6 sin_y =np.sin(x) 7 cos_y=np.cos(x/2)/2 #周期短频率高 8 9 mp.figure(‘Fill‘,facecolor=‘lightgray‘) 10 mp.title(‘Fill‘,fontsize=20) 11 mp.xlabel(‘x‘,fontsize=14) 12 mp.ylabel(‘y‘,fontsize=14) 13 mp.tick_params(labelsize=10) #标签文本的字体大小 14 mp.grid(linestyle=‘:‘) 15 16 mp.plot(x,sin_y,c=‘dodgerblue‘,label=r‘$y=sin(x)$‘) #线用plot来画 17 mp.plot(x,cos_y,c=‘orangered‘,label=r‘$y=\frac{1}{2}cos(\frac{x}{2})$‘) 18 mp.fill_between(x,cos_y,sin_y,cos_y < sin_y,color=‘dodgerblue‘,alpha=0.5) 19 mp.fill_between(x,cos_y,sin_y,cos_y > sin_y,color=‘orangered‘,alpha=0.5) 20 mp.legend() 21 22 23 mp.tight_layout() 24 mp.show()
4.柱状图
mp.bar(水平坐标数组,高度数组,ec=边缘颜色,fc=填充颜色,label=标签文本,alpha=透明度)
y1=np.random.uniform(0.5,1.0,n)
在0.5和1.0内产生n个随机数
例:
1 import numpy as np 2 import matplotlib.pyplot as mp 3 4 n=12 5 x=np.arange(n) #生成整数数组 6 y1 =(1-x/n)*np.random.uniform(0.5,1.0,n) 7 y2 =(1-x/n)*np.random.uniform(0.5,1.0,n) 8 mp.figure(‘Bar‘,facecolor=‘lightgray‘) 9 mp.title(‘Bar‘,fontsize=20) 10 mp.ylim(-1.25,1.25) 11 mp.xlabel(‘x‘,fontsize=14) 12 mp.ylabel(‘y‘,fontsize=14) #12个数字 13 mp.tick_params(labelsize=10) 14 mp.grid(axis=‘y‘,linestyle=‘:‘) #axis=‘y‘ 只有水平线的网格 15 16 for _x,_y in zip(x,y1): 17 #取矩形条的位置和高度 18 #显示文字,两位小数精度的浮点数来表示格式化占位符 19 mp.text(_x,_y,‘%.2f‘% _y,ha=‘center‘,va=‘bottom‘) #块在水平底下 20 21 22 for _x, _y in zip(x,y2): 23 #取矩形条的位置和高度 24 #显示文字,两位小数精度的浮点数来表示格式化占位符 25 mp.text(_x, -_y-0.015,‘%.2f‘% _y,ha=‘center‘,va=‘top‘) #块在水平底下 26 27 mp.bar(x,y1,ec=‘white‘,fc=‘dodgerblue‘,label=‘Sample 1‘) 28 mp.bar(x,-y2,ec=‘white‘,fc=‘dodgerblue‘,alpha=0.5,label=‘Sample 2‘) 29 mp.legend() 30 31 mp.show()
原文:https://www.cnblogs.com/AloneDKN/p/11466119.html