目录
一、Matplotlib设置坐标轴
今天继续学习matplotlib,学习笔记一中已经算是一个小的入门,可以展示出简单的图像,对于图像中X轴和Y轴没有做过多的修饰,如何修改X轴和Y轴呢?
1)、设定当前显示的X轴区间和Y轴区间,上代码了。
# -*- coding: UTF-8 -*-
import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(-4,4,30)
y1=x*2+1
y2 = x**2
plt.figure(num=3)
plt.plot(x,y1)
plt.plot(x,y2,color='red',linewidth=1,linestyle='--')
plt.xlim((-2,1))
plt.ylim((-1,2))
plt.show()
图像展示如下:
代码解读:
加入了plt.xlim和plt.ylim,通过上图中标红的框框里的值,会发现和我们上面xlim和ylim里的范围是一样的。
xlim和ylim的作用是展示的X轴和Y轴的范围内的图像,相当于是截取了展示了整体图像设定的一部分,通过拖动还是可以看其它X轴和Y轴的图像。
2)、修改显示X轴的脚标[ticks]
上代码:
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(-4,4,30)
y1=x*2+1
y2 = x**2
plt.figure(num=3)
plt.plot(x,y1)
plt.plot(x,y2,color='red',linewidth=1,linestyle='--')
plt.xlim((-2,1))
plt.ylim((-1,2))
new_ticks=np.linspace(-2,2,5)
plt.xticks(new_ticks)
plt.show()
图像展示如下:
代码解读:
在上面的代码的基础上我们又加入了一个new_ticks,ticks在英文中的解释是“标记,记号”,所以我们要对X轴上的标记重新规定一下。
1.new_ticks=np.linspace(-2,2,5) #生成-2到2之间的5个数。
2.plt.xticks(new_ticks) #设定X轴新的ticks为我们上面新生成的ticks值
3)、修改显示Y轴的脚标[ticks]
对于Y轴如果我们不想显示数字,想以文字描述来对应不同的数值,那么如何修改呢?其实也是对ticks的修改,继续上代码了:
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(-4,4,30)
y1=x*2+1
y2 = x**2
plt.figure(num=3)
plt.plot(x,y1)
plt.plot(x,y2,color='red',linewidth=1,linestyle='--')
plt.xlim((-2,1))
plt.ylim((-1,2))
new_ticks=np.linspace(-2,2,5)
plt.xticks(new_ticks)
plt.yticks([-1,-0.5,0,1,2],
['very bad','bad','nomal','good','very good'])
plt.show()
图像展示:
代码解读:
1.这里我们只是加入了 plt.yticks([-1,-0.5,0,1,2], ['very bad','bad','nomal','good','very good'])
规定Y轴中数字对应 显示的文本是什么,这里要注意的是不能打中文哟。会乱码的。
2.对于文本的显示可以对文本的规格进行设定,自己可以去试着修改运行一下看看。
plt.yticks([-1,-0.5,0,1,2],[r'$very\ \alpha$',r'$bad$',r'$nomal$',r'$good$',r'$very\ good$'])
3.X轴和Y轴加入lable可以通过以下方法:
plt.xlabel('I am X')
plt.ylabel('I am Y')
4)、移动X轴和Y轴
直接上代码喽:
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(-4,4,30)
y1=x*2+1
y2 = x**2
plt.figure(num=3)
plt.plot(x,y1)
plt.plot(x,y2,color='red',linewidth=1,linestyle='--')
plt.xlim((-2,1))
plt.ylim((-1,2))
new_ticks=np.linspace(-2,2,5)
plt.xticks(new_ticks)
plt.yticks([-1,-0.5,0,1,2],
[r'$very\ \alpha$',r'$bad$',r'$nomal$',r'$good$',r'$very\ good$'])
plt.xlabel('I am X')
plt.ylabel('I am Y')
#gca = get current axis
ax = plt.gca()
ax.spines['bottom'].set_color('none')
ax.spines['right'].set_color('none')
plt.show()
图像展示:
代码解读:
1.通过图像我们可以看出来图像的底部和右边部分的轴线没有了,用英文来解释是设置图像中底部和右边的spines没有颜色。
2.注:这里要注意ax.spines后面跟的是[] 而不是() , 我在开始打的时候设置的是小括号以为是调用的一个方法,所以运行报错。
好啦。继续!!!!
上代码:
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(-4,4,30)
y1=x*2+1
y2 = x**2
plt.figure(num=3)
plt.plot(x,y1)
plt.plot(x,y2,color='red',linewidth=1,linestyle='--')
plt.xlim((-2,1))
plt.ylim((-1,2))
new_ticks=np.linspace(-2,2,5)
plt.xticks(new_ticks)
plt.yticks([-1,-0.5,0,1,2],
[r'$very\ \alpha$',r'$bad$',r'$nomal$',r'$good$',r'$very\ good$'])
plt.xlabel('I am X')
plt.ylabel('I am Y')
#gca = get current axis
ax = plt.gca()
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
ax.spines['bottom'].set_position(('data',0))
ax.spines['left'].set_position(('data',0))
plt.show()
图像展示:
代码解读:
1.通过代码我们可以知道在上面的基础上加入了四句:
ax.xaxis.set_ticks_position('bottom') #设置X轴为bottom
ax.yaxis.set_ticks_position('left') #设置Y轴为left
ax.spines['bottom'].set_position(('data',0)) #设置底的也就是X轴的数据起点
ax.spines['left'].set_position(('data',0)) #设置left 的也就是Y轴的数据起点
二、Matplotlib设置 Legend小图例
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(-4,4,30)
y1=x*2+1
y2 = x**2
plt.figure(num=3)
plt.plot(x,y1,label='One')
plt.plot(x,y2,color='red',linewidth=1,linestyle='--',label='Two')
plt.xlim((-2,1))
plt.ylim((-1,2))
new_ticks=np.linspace(-2,2,5)
plt.xticks(new_ticks)
plt.yticks([-1,-0.5,0,1,2],
[r'$very\ \alpha$',r'$bad$',r'$nomal$',r'$good$',r'$very\ good$'])
plt.xlabel('I am X')
plt.ylabel('I am Y')
#gca = get current axis
ax = plt.gca()
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
ax.spines['bottom'].set_position(('data',0))
ax.spines['left'].set_position(('data',0))
plt.legend()
plt.show()
图像展示如下:
代码解读:
1.修改了两个地方:
第一个:plt.plot(x,y1,label='One')
plt.plot(x,y2,label='Two')
第二个:
plt.legend()
第一个地方是要给每一条线起个名字,用于在图例是显示,第二个就是加入图例了。
2.注:当然对于legend会有一些其它的属性,下面的属性加入后可以自己去运行一下了
第一部分:
l1,=plt.plot(x,y1,label='One')
l2,=plt.plot(x,y2,color='red',linewidth=1,linestyle='--',label='Two')
第二部分:
plt.legend(loc='best',handles=[l1,l2],labels=['new_One','new_Two'])
这里面要注意的是在plt.plot()前面的变量名要加一个逗号,loc='best'的含义是把图例放在图像的最好的位置上面。
三、设置annotate注释和task注释
1.annotate注释设置属性非常多,代码如下:
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(-3,3,50)
y1 = 2*x+1
y2 = x**2
plt.figure(num=1, figsize=(8, 5),)
plt.xlabel('I am X')
plt.ylabel('I am Y')
l1,=plt.plot(x, y1,)
l2,=plt.plot(x,y2,linestyle='--')
plt.legend(handles=[l1,l2,],labels=['One','Two'],loc='best')
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')
ax.spines['bottom'].set_position(('data',0))
ax.spines['left'].set_position(('data',0))
x0=-2
y0=2*x0+1
plt.scatter(x0,y0,c='b')
plt.plot([x0,x0],[y0,0],linestyle='--',c='k')
plt.annotate(r'$2*x+1=%s$'%y0,xy=(x0,y0),xycoords='data',xytext=(30,-30),textcoords='offset points',
fontsize=12,arrowprops=dict(arrowstyle='->',connectionstyle='arc3,rad=.2'))
plt.show()
展示如下:
代码解读:
1.注:plot和scatter方法,一个是线,一个是点,可以通过一些小的例子演示
所以我们要为线上一个点加注释其实是要先在线上画一个点,如下代码:
plt.scatter(x0,y0,c='b')
c='b':表示设置颜色为蓝色c=color b=blue
2.画完点后要再画一条虚线
plt.plot([x0,x0],[y0,0],linestyle='--',c='k')
3.最关键的注释annotate
plt.annotate(r'$2*x+1=%s$'%y0,xy=(x0,y0),xycoords='data',xytext=(30,-30),textcoords='offset points',fontsize=12,arrowprops=dict(arrowstyle='->',connectionstyle='arc3,rad=.2'))
三、设置tick透明度
直接上代码了
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-3, 3, 50)
y = 0.1*x
plt.figure()
# 在 plt 2.0.2 或更高的版本中, 设置 zorder 给 plot 在 z 轴方向排序
plt.plot(x, y, linewidth=10, zorder=1)
plt.ylim(-2, 2)
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data', 0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data', 0))
for label in ax.get_xticklabels()+ax.get_yticklabels():
label.set_fontsize(12)
label.set_bbox(dict(facecolor='white',edgecolor='none',alpha=0.7,zorder=2))
plt.show()
图像展示:
代码解读:
set_fontsize:重新设置字体
facecolor:设置字后面的前景色
edgecolor:设置是否有边框
alpha:设置透明度