前言
在B站上把莫烦的Matplotlib教学视频刷一遍
正文
一、
首先是Matplotlib的基本用法
import matplotlib.pyplot as plt import numpy as np #%matplotlib auto #%matplotlib qt5 x = np.linspace(-1,1,50) y = 2*x+1 plt.plot(x,y) plt.show()
首先上述代码如果是在jupyter notebook中执行的,那么注释掉的两行就要至少放一行在这里,才会出现独立的图片,否则会是内嵌在jupyter notebook里;
当然,如果是单独运行一个py文件,那么上述这两行就不能写上去,否则要报错;
二、
接着是figure的使用方法,figure是设定指定窗口来画图,多个figure有多个图片,也可以在一个figure里画好几条线
%matplotlib qt5 x = np.linspace(-3,3,50) y1 = 2*x+1 y2 = x**2 plt.figure() plt.plot(x,y1) plt.figure(num=3,figsize=(8,5)) plt.plot(x,y2) #plt.plot(x,y1,color='red',linewidth=1.0,linestyle='--') plt.show()
表示两个figure生成两个图片,其中第二个图片设定为序号3,并且长和宽也指定
同样,当我需要在一个图片里放两条线时,只需
%matplotlib qt5 x = np.linspace(-3,3,50) y1 = 2*x+1 y2 = x**2 plt.figure() plt.plot(x,y1) plt.figure(num=3,figsize=(8,5)) plt.plot(x,y2) plt.plot(x,y1,color='red',linewidth=1.0,linestyle='--') plt.show()
三、
坐标轴修改
首先我们看一下怎样限定x和y轴的坐标范围:
%matplotlib qt5 x = np.linspace(-3,3,50) y1 = 2*x+1 y2 = x**2 plt.figure() plt.plot(x,y2) plt.plot(x,y1,color='red',linewidth=1.0,linestyle='--') plt.xlim((-1,2)) plt.ylim((-2,3)) plt.show()
————————————————————————————————————————
接着看看对坐标轴刻度说明进行修改
%matplotlib qt5 x = np.linspace(-3,3,50) y1 = 2*x+1 y2 = x**2 plt.figure() plt.plot(x,y2) plt.plot(x,y1,color='red',linewidth=1.0,linestyle='--') plt.xlim((-1,2)) plt.ylim((-2,3)) plt.xlabel('I am x') plt.ylabel('I am y') new_ticks= np.linspace(-1,2,4) print(new_ticks) plt.xticks(new_ticks) plt.yticks([-2,-1.8,-1,1.22,3,], [r'$really bad$',r'$bad alpha$',r'$normal$',r'$good$' ,r'$really good$']) plt.show()
xticks和yticks有两个返回值,一个是刻度,一个刻度标签
————————————————————————————————————————————————————————
对坐标轴位置、刻度位置进行修改
%matplotlib qt5 x = np.linspace(-3,3,50) y1 = 2*x+1 y2 = x**2 plt.figure() plt.plot(x,y2) plt.plot(x,y1,color='red',linewidth=1.0,linestyle='--') plt.xlim((-1,2)) plt.ylim((-2,3)) plt.xlabel('I am x') plt.ylabel('I am y') new_ticks= np.linspace(-1,2,5) print(new_ticks) plt.xticks(new_ticks) plt.yticks([-2,-1.8,-1,1.22,3,], [r'$really bad$',r'$bad alpha$',r'$normal$',r'$good$' ,r'$really good$']) ax = plt.gca() #隐藏顶部和右边两条轴 ax.spines['right'].set_color('none') ax.spines['top'].set_color('none')
#设置坐标轴上的数字显示的位置,top:显示在顶部 bottom:显示在底部,默认是none ax.xaxis.set_ticks_position('bottom') ax.yaxis.set_ticks_position('left') #把底部的轴移动到竖轴的0位置;把竖直的轴移动到横轴的0位置 ax.spines['bottom'].set_position(('data',0)) ax.spines['left'].set_position(('data',0)) plt.show()
解释 ax = plt.gca()
在matplotlib的图中,默认有四个轴,两个横轴和两个竖轴,可以通过ax = plt.gca()方法获取,gca是‘get current axes’的缩写,获取图像的轴,总共有四个轴top、bottom、left和right。
三、
图例
import matplotlib.pyplot as plt import numpy as np x = np.linspace(-3,3,50) y1 = 2*x+1 y2 = x**2 plt.figure() plt.xlim((-1,2)) plt.ylim((-2,3)) plt.xlabel('I am x') plt.ylabel('I am y') new_ticks= np.linspace(-1,2,5) print(new_ticks) plt.xticks(new_ticks) plt.yticks([-2,-1.8,-1,1.22,3,], [r'$really bad$',r'$bad alpha$',r'$normal$',r'$good$' ,r'$really good$']) l1, = plt.plot(x,y1,label='up') l2, = plt.plot(x,y2,color='red',linewidth=1.0,linestyle='--',label='down') plt.legend(handles=[l1,l2],labels=['aaa','bbb'],loc='best') plt.show()
loc参数是图例的位置,还有很多,例如upper right,upper down等,
但是这里有一个很奇怪的地方,假如l1 = plt.plot(x,y1,label='up'),也就是去掉,后,图例就显示不成功了,但是如果lengend参数较简单,例如只有一个loc,那也会成功。
四、注释
x = np.linspace(-3,3,50) y = 2*x+1 plt.figure(num=1,figsize=(8,5),) plt.plot(x,y,) ax = plt.gca() ax.spines['right'].set_color('none') ax.spines['top'].set_color('none') ax.xaxis.set_ticks_position('bottom') ax.yaxis.set_ticks_position('left') #把底部的轴移动到竖轴的0位置;把竖直的轴移动到横轴的0位置 ax.spines['bottom'].set_position(('data',0)) ax.spines['left'].set_position(('data',0)) x0 = 1 y0 = 2*x0 + 1
#画一条竖线 plt.scatter(x0,y0,s=50,color='b') plt.plot([x0,x0],[y0,0],'k--',lw=2.5) #method 1 plt.annotate(r'$2x+1=%s$'% y0,xy=(x0,y0),xycoords='data',xytext=(+30,-30),textcoords='offset points', fontsize=16,arrowprops=dict(arrowstyle='->',connectionstyle='arc3,rad=.2')) #method 2 ############### plt.text(-3.7,3,r'$This is the same text. mu sigma_i alpha_t$', fontdict={'size':16,'color':'r'}) plt.show()
method1里面,xytext表示注释离点的坐标