其他分享
首页 > 其他分享> > 莫烦课程笔记总结之matplotlib(五)——annotation标注

莫烦课程笔记总结之matplotlib(五)——annotation标注

作者:互联网

如何在图片中添加一个注解呢?

 1 import matplotlib.pyplot as plt
 2 import numpy as np
 3 
 4 x = np.linspace(-3,3,50)
 5 y = 2*x+1
 6 
 7 plt.figure(num=1,figsize=(8,5),)
 8 plt.plot(x,y)
 9 
10 ax = plt.gca()
11 ax.spines['right'].set_color('none')
12 ax.spines['top'].set_color('none')
13 
14 #设置x轴
15 ax.xaxis.set_ticks_position('bottom')
16 ax.spines['bottom'].set_position(('data',0))
17 
18 #设置y轴
19 ax.yaxis.set_ticks_position('left')
20 ax.spines['left'].set_position(('data',0))
21 
22 
23 x0 = 1
24 y0 = 2*x0+1
25 
26 #将图表显示出来
27 plt.show()

 

运行上面代码后,起初图形是这样的:                                                                                               添加注解后的图像:

          

 

 

 

 

首先了解plt.scatter(x,y)  表示的是一系列的点的形式

例如:

 1 import matplotlib.pyplot as plt
 2 import numpy as np
 3 
 4 x = np.linspace(-3,3,50)
 5 y = 2*x+1
 6 
 7 plt.figure(num=1,figsize=(8,5),)
 8 plt.scatter(x,y)
 9 
10 ax = plt.gca()
11 ax.spines['right'].set_color('none')
12 ax.spines['top'].set_color('none')
13 
14 #设置x轴
15 ax.xaxis.set_ticks_position('bottom')
16 ax.spines['bottom'].set_position(('data',0))
17 
18 #设置y轴
19 ax.yaxis.set_ticks_position('left')
20 ax.spines['left'].set_position(('data',0))
21 
22 
23 x0 = 1
24 y0 = 2*x0+1
25 # plt.scatter()
26 #将图表显示出来
27 plt.show()

得到的结果是:

 

 

 然后在上面的代码进行改动

 1 import matplotlib.pyplot as plt
 2 import numpy as np
 3 
 4 x = np.linspace(-3,3,50)
 5 y = 2*x+1
 6 
 7 plt.figure(num=1,figsize=(8,5),)
 8 plt.plot(x,y)
 9 
10 ax = plt.gca()
11 ax.spines['right'].set_color('none')
12 ax.spines['top'].set_color('none')
13 
14 #设置x轴
15 ax.xaxis.set_ticks_position('bottom')
16 ax.spines['bottom'].set_position(('data',0))
17 
18 #设置y轴
19 ax.yaxis.set_ticks_position('left')
20 ax.spines['left'].set_position(('data',0))
21 
22 #显示(x0,y0)这个点
23 x0 = 1
24 y0 = 2*x0+1
25 plt.scatter(x0,y0,color='b')  #颜色设置为blue
26 
27 #plot出一条通过(x0,y0)这个点垂直于x轴的虚线
28 plt.plot([x0,x0],[y0,0],'k--',lw=2.5) #对应于(x0,y0)和(x0,y0)这两个点,两点确定一条直线,黑色虚线,线条宽度2.5
29 #将图表显示出来
30 plt.show()

 

 

 

继续添加代码,运行后发现报错如下:

ValueError: offset point is not a recognized coordinate

原因是:

 

 

 在test.py中定义如下:

 

 

 改正后正常运行,代码如下:

 1 import matplotlib.pyplot as plt
 2 import numpy as np
 3 
 4 x = np.linspace(-3,3,50)
 5 y = 2*x+1
 6 
 7 plt.figure(num=1,figsize=(8,5),)
 8 plt.plot(x,y)
 9 
10 ax = plt.gca()
11 ax.spines['right'].set_color('none')
12 ax.spines['top'].set_color('none')
13 
14 #设置x轴
15 ax.xaxis.set_ticks_position('bottom')
16 ax.spines['bottom'].set_position(('data',0))
17 
18 #设置y轴
19 ax.yaxis.set_ticks_position('left')
20 ax.spines['left'].set_position(('data',0))
21 
22 #显示(x0,y0)这个点
23 x0 = 1
24 y0 = 2*x0+1
25 plt.scatter(x0,y0,color='b')  #颜色设置为blue
26 
27 #plot出一条通过(x0,y0)这个点垂直于x轴的虚线
28 plt.plot([x0,x0],[y0,0],'k--',lw=2.5) #对应于(x0,y0)和(x0,y0)这两个点,两点确定一条直线,黑色虚线,线条宽度2.5
29 
30 #method 1
31 plt.annotate(r'$2x+1=%s$'%y0,xy=(x0,y0),xycoords='data',xytext=(+30,-30),textcoords='offset points',
32              fontsize=16,arrowprops=dict(arrowstyle='->',connectionstyle='arc3,rad=.2'))
33 
34 #将图表显示出来
35 plt.show()

运行结果:

 

 继续对上述代码进行改动:

 1 import matplotlib.pyplot as plt
 2 import numpy as np
 3 
 4 x = np.linspace(-3,3,50)
 5 y = 2*x+1
 6 
 7 plt.figure(num=1,figsize=(8,5),)
 8 plt.plot(x,y)
 9 
10 ax = plt.gca()
11 ax.spines['right'].set_color('none')
12 ax.spines['top'].set_color('none')
13 
14 #设置x轴
15 ax.xaxis.set_ticks_position('bottom')
16 ax.spines['bottom'].set_position(('data',0))
17 
18 #设置y轴
19 ax.yaxis.set_ticks_position('left')
20 ax.spines['left'].set_position(('data',0))
21 
22 #显示(x0,y0)这个点
23 x0 = 1
24 y0 = 2*x0+1
25 plt.scatter(x0,y0,color='b')  #颜色设置为blue
26 
27 #plot出一条通过(x0,y0)这个点垂直于x轴的虚线
28 plt.plot([x0,x0],[y0,0],'k--',lw=2.5) #对应于(x0,y0)和(x0,y0)这两个点,两点确定一条直线,黑色虚线,线条宽度2.5
29 
30 #method 1
31 plt.annotate(r'$2x+1=%s$'%y0,xy=(x0,y0),xycoords='data',xytext=(+30,-30),textcoords='offset points',
32              fontsize=16,arrowprops=dict(arrowstyle='->',connectionstyle='arc3,rad=.2'))
33 
34 #method 2
35 plt.text(-3.7,3,r'$This\ is\ the\ some\ text.\ \mu\ \sigma_i\ \alpha_t$',
36          fontdict={'size':16,'color':'r'})
37 #将图表显示出来
38 plt.show()

运行结果如下:

 

 最后得到目标图片!

 

标签:plt,莫烦,matplotlib,spines,set,y0,ax,x0,annotation
来源: https://www.cnblogs.com/industrial-fd-2019/p/14791910.html