Matploblib模块学习
import matplotlib.pyplot as plt #导入matplotlib的python绘图包,用plt简写
import numpy as np #导入numpy包,简写为np
x=np.linspace(-1,1,100) #从-1到1等间隔地生成100个数据赋予x
y=2*x+1 #生成一个函数
plt.plot(x,y) #把这个函数导入
plt.show() #画出这个函数的图像
import matplotlib.pyplot as plt #导入matplotlib的python绘图包,用plt简写
import numpy as np #导入numpy包,简写为np
x=np.linspace(-1,1,100) #从-1到1等间隔地生成100个数据赋予x
plt.figure() #自定义一个图像(括号内无数据就是系统默认)
y1=2*x+1 #生成一个函数
plt.plot(x,y1) #把这个函数导入
plt.figure() #生成一个新函数
y2=x**2
plt.plot(x,y2)
plt.show() #画出这个函数的图像
即可获得在两个坐标系中的两个图像
在自定义图像中plt.figure(figsize=(x,y)) 更改figsize的值即可更改图像的大小
如果想要将这两条曲线放在同一坐标系中
只需创建一个figure即可
在导入函数的过程中可以更改plt.plot()中的参数
plt.plot(x,y,color=‘red’,linewide=1.0,linestyle=’–’) #将图线颜色改为红色,粗细程度设置为1.0,线条样式改为虚线(‘-’代表实线,‘–’代表虚线)
import matplotlib.pyplot as plt #导入matplotlib的python绘图包,用plt简写
import numpy as np #导入numpy包,简写为np
x=np.linspace(-3,3,100) #从-3到3等间隔地生成100个数据赋予x
y1=2*x+1 #生成一个函数
y2=x**2
plt.plot(x,y1,color=‘red’,linewide=1.0,linestyle=’–’) #将图线颜色改为红色,粗细程度设置为1.0,线条样式改为虚线(‘-’代表实线,‘–’代表虚线)
plt.plot(x,y2,color=‘blue’,linewide=5.0,linestyle=’-) #图线颜色改为蓝色,粗细程度设置为5.0,线条样式改为实线(‘-’代表实线,‘–’代表虚线)
plt.show() #画出这个函数的图像
设置图像显示区域
plt.xlim((-1,2)) #把x的范围限制在-1到2
plt.ylim((-2,3)) #把y的范围限制在-2到3
增加坐标轴描述
plt.xlabel(‘I AM X’) #把x轴的标签设置为 I AM X
plt.ylabel(‘I AM Y’) #把Y轴的标签设置为 I AM Y
改变单位长度
new_ticks = np.linspace(-2,2,11) #从-2到2等距选取11个点(-2,-1.6…1.6,2)并赋予new_ticks变量,返回一个列表
plt.xticks(new_ticks) #将此列表设置为x轴的单位长度
这个列表也可以是一个文字的列表,但是需要规定对应的数值
plt.yticks([-1,0,1,2,3],[‘level1’,‘level2’,‘level3’,‘level4’,‘level5’]) #用levelx代替x显示,使可读性增加
ax = plt.gca() #获取当前的坐标轴,保存为ax变量
ax.spines[‘right’].set_color(‘red’)#将右边框设置为红色 spine选项中(right右left左top上bottom下)set_color选项设置为none隐藏此边框
ax.xaxis.set_ticks_position(‘bottom’) #将平面直角坐标系的x轴设置为bottom
ax.xaxis.set_ticks_position(‘left’) #将平面直角坐标系的y轴设置为left
ax.spines[‘bottom’].set((‘data’,0)) #创建一个交点为(0,0)的坐标系
ax.spines[‘left’].set((‘data’,0))
matploblib中的图例
import matplotlib.pyplot as plt #导入matplotlib的python绘图包,用plt简写
import numpy as np #导入numpy包,简写为np
x=np.linspace(-3,3,100) #从-3到3等间隔地生成100个数据赋予x
y1=2*x+1 #生成一个函数
y2=x**2
plt.xlim((-1,2)) #把x的范围限制在-1到2
plt.ylim((-2,3)) #把y的范围限制在-2到3
plt.xlabel(‘I AM X’) #把x轴的标签设置为 I AM X
plt.ylabel(‘I AM Y’) #把Y轴的标签设置为 I AM Y
new_ticks = np.linspace(-2,2,11) #从-2到2等距选取11个点(-2,-1.6…1.6,2)并赋予new_ticks变量,返回一个列表
plt.xticks(new_ticks) #将此列表设置为x轴的单位长度
这个列表也可以是一个文字的列表,但是需要规定对应的数值
plt.yticks([-1,0,1,2,3],[‘level1’,‘level2’,‘level3’,‘level4’,‘level5’]) #用levelx代替x显示,使可读性增加
l1,=plt.plot(x,y1,color=‘red’,linewide=1.0,linestyle=’–’) #将图线颜色改为红色,粗细程度设置为1.0,线条样式改为虚线(‘-’代表实线,‘–’代表虚线),保存为l1
l2,=plt.plot(x,y2,color=‘blue’,linewide=5.0,linestyle=’-) #图线颜色改为蓝色,粗细程度设置为5.0,线条样式改为实线(‘-’代表实线,‘–’代表虚线),保存为l2
plt.show() #画出这个函数的图像
显示图例
plt.plot(handles=[l1,l2],labels=[test1,test2],loc=‘best’)
#handles中传入图像,在图例中会以缩小形式展示,lables中的数据指对图例的文字描述,loc值指图例在图像中显示的位置(best指系统自动查找最佳位置)
为图线增加描述(解析式,标注点等)
x0=0.5
y0=2*x0+1
plt.scatter(x0,y0,s=50,color=‘b’) #在图像上标记出一个点,s的值代表点的大小,color代表点的颜色(b=blue)
过一点画垂直于x轴的直线
plt.plot([x0,y0],[x0,0],‘k–’,lw=2) #相当于画一条直线,k代表黑色,lw代表linewide可以调整线的粗细
增加对于图像的描述
plt.annotate(r’
2
x
+
1
=
2x+1=%s
2x+1= % y0,xy=(x0,y0),xytext(+30,-30),textcoords=‘offset points’,fontsize=16,arrowprops=dict(arrowstyle=’->’,connectionstyle=‘arc3,rad=.2’))
#在原始字符串的$$中间添加描述的内容,xy是一个确定的点,xytext是描述字符串关于这个点的偏移,textcoord选项的意思是以xy这个点作为偏移的标准点,fontsize的值代表字体大小,arrowstyle的意思是创建一个箭头,connectionstyle参数确定箭头的弧度
在图像某位置插入文字
plt.text(-1,2,r’
t
h
i
s
i
s
t
h
e
t
e
x
t
this\ is\ the\ text
this is the text’,fontdict{‘size’:‘16’,‘color’:‘r’})
#-1,2是文字的坐标,在原始字符串中空格需要转义,fontdict自定义字体
绘制散点图
plt.scatter(np.arange(5),np.arange(5)) #创建一个散点图 x,y的位置传入1,2,3,4
x=np.random.normal(0,1,500) #以0为中心,1为分布宽度生成500个数
y=np.random.normal(0,1,500)
plt.scatter(x,y,s=50,c=‘b’,alpha=0.5) #s的值代表点的大小,c代表点的颜色,alpha表示不透明度
直方图
x=np.arange(10)
y=2**x+10
plt.bar(x,y,facecolor=’#9999ff’,edgecolor=‘white’) #创建一个直方图,facecolor参数改变柱形的颜色用#+rgb的值,edgecolor参数改变边框颜色
for x,y in zip(x,y): #把x,y打包为元组的形式提取
plt.text(x+0.4,y,’%.2f’ % y,ha=‘center’,va=‘hottom’) #在柱状图x的柱顶显示对应y的值(保留两位小数),加0.4的目的是将y的值显示在柱的正上方
plt.show()
绘制3D图
from mpl_toolkits.mlot3d import Axes3D #导入绘制3D图像需要的包
fig = plt.figure()
x= np.arange(-4,4,0.25) #生成-4,4之间的值,间隔为0.25
y= np.arange(-4,4,0.25)
X,Y=np.meshgrid(x,y) #生成一个网格,即x,y的坐标系
R=np.sqrt(x2,y2) #定义z轴的值
Z=np.sin® #将z轴的值导入
ax.plot_surface(X,Y,Z,rstride=1,cstride=1,cmap=plt.get_cmap(‘rainbow’))
#生成图形,rstride,cstride表示图像中色块的大小,值越小色块越密集,cmap的值代表色块的颜色(rainbow指彩虹)
ax=Axes3D(fig) #将图像传入,创建一个3D图形
plt.show
创建3d图在平面内的映射
ax.contourf(X,Y,Z,zdir=‘z’,offset=-2,cmap=plt.get_cmap(‘ranbow’)
#zdir代表映射出的平面与那个轴垂直,offset的值指映射水平面(因为z轴的值都在-2上面)
ax.set_zlim(-2,2) #限定一下z轴的显示区域,让图像更美观
tips:用编译器打开可以立体旋转
subplot 子图像
子图像可以理解为在母图像中的截图
plt.subplot(2,2,1) #这是定义显示区域中的显示位置(两行两列,这是第一个)
plt.plot([0,1],[0,1]) #子图像截取范围
如果想要图标大小不一致
plt.subplot(2,1,1) #第一个图表
plt.subplot(2,3,4) #第二个图表,以此类推
即在第一排放一个图表
第二排放并排三个图表
matplotlib中的动态作图
from matploblib import animation #导入动态作图包
fig,ax=subplots()
x= np.arange(0,2np.pi,0.01) #生成0到2Π以0.01为间隔的值
line,=ax.plot(x,np,sin(x)) #做一条正弦函数的图像
def animate(i):
lines.set_ydata(np.sin(xi/10) #改变图像中y对应的值
return line,
def init(i):
line.set_ydata(np.sin(x)) #将这个图像初始化为正弦函数
return line,
ani = animation.FunAnimation(fig=fig,func=animate,init_func=init,interval=20)
#使用动态函数方法。fig值传入图像,func的值导入方法,init_func使用初始化函数,interval是动态图像的刷新率(ms)
完结撒花!