如何在图片中添加一个注解呢?
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()
运行结果如下:
最后得到目标图片!