import numpy as np
import matplotlib.pyplot as plt
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)) #x轴取值范围
plt.ylim((-2,3)) #y轴取值范围
plt.xlabel('I am x') #x轴label
plt.ylabel('I am y') #y轴label
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$', r'$normal$', r'$good$', r'$really good$'])
#坐标轴的记号
#y轴的将对应点改成了英语记号, 使用$ $改变了字体,改为数学字体,使用了$后需要用转义空格才行
#使用alpha可以显示α
plt.show()
# 或者通过下面的参数对坐标轴进行设置
#gca = 'get current axis'
ax = plt.gca() #坐标轴
ax.spines['right'].set_color('none') #spines 是figure的4个边框
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom') #用下面的坐标轴代替x轴
ax.yaxis.set_ticks_position('left') #用左面的坐标轴代替y轴
ax.spines['bottom'].set_position(('data',0)) #将x轴绑定在y=0的位置
ax.spines['left'].set_position(('data',0)) #将y轴绑定在x=0的位置
#还可以用axes设置坐标轴,可以按照百分比来设置
plt.show()
figure 如下所示:
legend 图例
import numpy as np
import matplotlib.pyplot as plt
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$', r'$normal$', r'$good$', r'$really good$'])
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))
l1, = plt.plot(x,y2, label='up') #label: 名字
l2, = plt.plot(x,y1,color='red',linewidth=1.0,linestyle='--', label='down')
#loc: best、upper right ……, handles:线,label:自定义名字
plt.legend(handles=[l1, l2], labels=['aaa','bbb'], loc='best')
#也可以只选择显示部分线的legend
plt.show()
若将线传入handles中,必须在定义时加逗号(l1, l2,)
annotation 注解
import numpy as np
import matplotlib.pyplot as plt
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')
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')#s为大小(size)
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=0.2'))
#xycoords:text位置的基准,xytext:与基准之间的相对位置
#textcoords:基于offset point 进行偏移
#arrowprops:连接线的方向和样式
# method 2 #####
plt.text(-3.7, 3, r'$This is the some text. mu sigma_i alpha_t$',
fontdict={'size':16,'color':'r'})
#前两个为位置 xy
plt.show()
结果如下图所示:
axis tick 坐标轴刻度
本节课内容是教你如何把坐标轴数值的label拿出来,再单独设置参数
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-3, 3, 50)
y = 0.1*x
plt.figure()
plt.plot(x,y, linewidth=10,zorder=-2) #zorder为高度
plt.ylim(-2,2)
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))
for label in ax.get_xticklabels() + ax.get_yticklabels():#拿出坐标轴数值的label
label.set_fontsize(12)
label.set_bbox(dict(facecolor='white',edgecolor='None', alpha=0.7))
#label 的框框 alpha:透明度
plt.show()
视频中坐标轴的数值在线段上面,但是自己编程却被线段覆盖了,因为z轴的优先级问题,因此需要在plot中设置zorder为-2,使得线段在坐标轴下面
结果如下图所示:



