#第一课基础
import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(-1,1,100)#从-1到1生成100个点
y=2*x+1#由X来求Y,Y的区间自动设定
plt.plot(x,y)#绘图
plt.show()#展示到控制台
#第二课图像
y1=2*x+1
y2=x**2
plt.figure()
plt.plot(x,y1)
plt.figure(figsize=(8,5))#此处8,5就是控制图的大小
plt.plot(x,y2)
plt.show()
#用figure是想在两个图中显示,就不写figure,两条线就会在一个图中绘制
plt.plot(x,y1,color='red',linewidth=1.0,linestyle='--')#虚线
plt.plot(x,y2,color='blue',linewidth=5.0,linestyle='-')#实线
plt.show()
#第三课坐标轴
x=np.linspace(-3,3,100)
y1=2*x+1
y2=x**2
plt.xlim((-1,2))#直接进行limit
plt.ylim((-2,3))#直接进行limit
plt.xlabel("I am x")#X轴标签
plt.ylabel("I am y")#Y轴标签
plt.plot(x,y1,color='red',linewidth=1.0,linestyle='--')#虚线
plt.plot(x,y2,color='blue',linewidth=5.0,linestyle='-')#实线
new_ticks=np.linspace(-2,2,11)#由-2到2分10段
print(new_ticks)#可以看一下X的标
plt.xticks(new_ticks)#改新标签
plt.yticks([-1,0,1,2,3],#两个列表对应修改
['level1','level2','level3','level4','level5'])
plt.show()
#第四课坐标轴
#思路:x,y->xlim,ylim->xlabel,ylabel->xticks,yticks->color,linewidth,linestyle
x=np.linspace(-3,3,100)
y1=2*x+1
y2=x**2
plt.xlim((-1,2))
plt.ylim((-2,3))
plt.xlabel("I am x")
plt.ylabel("I am y")
plt.plot(x,y1,color='red',linewidth=1.0,linestyle='--')
plt.plot(x,y2,color='blue',linewidth=5.0,linestyle='-')
plt.xticks(new_ticks)
plt.yticks([-1,0,1,2,3],
['level1','level2','level3','level4','level5'])
ax=plt.gca()#gca get current axis
#把右边和上边的边框去掉
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
#把X轴的刻度设置为'bottom'
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
#设置bottom对应到0点,left对应到1点
ax.spines['bottom'].set_position(('data',0))
ax.spines['left'].set_position(('data',1))
plt.show()
#第五课图例
x=np.linspace(-3,3,100)
y1=2*x+1
y2=x**2
plt.xlim((-1,2))
plt.ylim((-2,3))
plt.xlabel("I am x")
plt.ylabel("I am y")
l1,=plt.plot(x,y1,color='red',linewidth=1.0,linestyle='--')
l2,=plt.plot(x,y2,color='blue',linewidth=5.0,linestyle='-')
plt.legend(handles=[11,12],labels=['test1','test2'],loc='best')#绘制图例:对应线线名称,标签,位置
new_ticks=np.linspace(-2,2,11)
plt.xticks(new_ticks)
plt.yticks([-1,0,1,2,3],
['level1','level2','level3','level4','level5'])
plt.show()
#第六课标注
import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(-1,1,100)#从-1到1生成100个点
y1=2*x+1#由X来求Y,Y的区间自动设定
plt.plot(x,y1,color='red',linewidth=1.0,linestyle='-')
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=0.5
y0=2*x0+1
plt.scatter(x0,y0,s=50,color='b')#画点
plt.plot([x0,x0],[y0,0],'k--',lw=2)#画线
plt.annotate(r'$2x+1=%s$' % y0,xy=(x0,y0),xytext=(+30,-30),textcoords='offset points',fontsize=16,arrowprops=dict(arrowstyle='->',connectionstyle='arc3,rad=.2'))
plt.text(-1,2,r'$this\ is\ text$',fontdict={'size':'16','color':'r'})
#个人表示用下面那句就好了,上面那句多个箭头麻烦好多倍!
plt.show()
#第七课散点图
plt.scatter(np.arange(5),np.arange(5))
plt.show()
x=np.random.normal(0,1,500)
y=np.random.normal(0,1,500)
plt.scatter(x,y,s=50,c='b',alpha=0.5)#坐标,半径,颜色,透明度
plt.xlim((-2,2))
plt.ylim((-2,2))
plt.show()
#第八课直方图
x=np.arange(10)
y=2**x+10
plt.bar(x,y,facecolor='#9999ff',edgecolor='white')#可以尝试plt.bar(x,-y)
for x,y in zip(x,y):
plt.text(x,y,'%.2f' % y,ha='center',va='bottom')
plt.show()
#第九课等高线图
def f(x,y):
return (1-x/2+x**5+y**3)*np.exp(-x**2-y**2)
x=np.linspace(-3,3,100)
y=np.linspace(-3,3,100)
X,Y=np.meshgrid(x,y)
plt.contourf(X,Y,f(X,Y),8,alpha=0.75,cmap=plt.cm.hot)
plt.xticks(())
plt.yticks(())
plt.show()
#第十课3D图
from mpl_toolkits.mplot3d import Axes3D
fig=plt.figure()
ax=Axes3D(fig)
x=np.arange(-4,4,0.25)
y=np.arange(-4,4,0.25)
X,Y=np.meshgrid(x,y)
R=np.sqrt(X**2 + Y**2)
Z=np.sin(R)
ax.plot_surface(X,Y,Z,rstride=1,cstride=1,cmap=plt.get_cmap('rainbow'))
plt.show()
#第十一课子图
plt.figure()#一定要在同一个figure下
plt.subplot(2,1,1)#2行1列,当前是第一个,即左上方
plt.plot([0,1],[0,1])
plt.subplot(2,3,4)#2行3列,当前是第四个,即第二行第一个
plt.plot([0,1],[0,1])
plt.subplot(235)#可以省逗号!
plt.plot([0,1],[0,1])
plt.subplot(236)
plt.plot([0,1],[0,1])
plt.show()
#第十二课动态图
from matplotlib import animation
fig.ax=plt.subplots()
x=np.arange(0,2*np.pi,0.01)
line,=ax.plot(x,np.sin(x))
def animate(i):
line.set_ydata(np.sin(x+i/10))
return line,
def init():
line.set_ydata(np.sin(x))
return line,
ani=animation.FuncAnimation(fig=fig,func=animate,init_func=init,interval=20)
plt.show()