接着上篇,下篇主要是一些进阶三维和动态图例,如果对大家有帮助,希望能得到你们关注和点赞!正所谓赠人玫瑰收留余香。
-
Matplotlib(七)
等高线图,参数中cmap有2个参数一个热效果图,一个是冷效果图,都可以尝试下
def f(x,y):
# 高度公式
return (1-x/2 + x**5 + y**3) * np.exp(-x**2 - y**2)
n = 256
plt.figure(figsize=(8, 5), dpi=80)
x = np.linspace(-3,3,n)
y = np.linspace(-3,3,n)
# 定义网格
X,Y = np.meshgrid(x,y)
# 等高线、cmap将每一块配置成热图,另一个参数cmap=plot.cm.cool
plt.contourf(X,Y,f(X,Y),12,alpha=0.65,cmap=plt.cm.hot)
# contour设置等高线的线
C = plt.contour(X,Y,f(X,Y),12,colors='black',linewidth=.5)
# inline:在等高线里
plt.clabel(C,inline='Ture',fontsize=10)
plt.xticks(())
plt.yticks(())
plt.show(())
-
Matplotlib(八)
图像是3D图,地面是色彩平压效果
from mpl_toolkits.mplot3d import Axes3D
plt.figure(figsize=(10, 6), dpi=80)
# 设置三维坐标
fig = plt.figure()
ax = Axes3D(fig)
X = np.arange(-4,4,0.25)
Y = np.arange(-4,4,0.25)
# XY平面的网格数据
X,Y = np.meshgrid(X,Y)
Z = np.sin(np.sqrt(X**2+Y**2))
# 画3d图rstride=row_stride行跨、cstride=column_stride列跨
ax.plot_surface(X,Y,Z,rstride=1,cstride=1,cmap=plt.get_cmap('rainbow'))
# 等高线图,zdir以Z轴为映射方向,offset刻度值,
ax.contourf(X,Y,Z,zdir='z',offset=-2,cmap='rainbow')
# 固定Z的范围
ax.set_zlim(-2,2)
plt.show()
-
Matplotlib(九)
窗格布局——1
plt.figure(figsize=(10, 6), dpi=80)
n =256
x = np.random.normal(0,1,n)
y = np.random.normal(0,1,n)
# for color value
# 色彩数量值
t = np.arctan2(y,x)
plt.figure('2')
plt.subplot(211)
# 先将figure分为两行一列
plt.scatter(x,y,s=75,c=t,marker='+',alpha=.5)
plt.subplot(234)
# 再将图分为2行3列,那么从第四个开始就在第二行了
plt.scatter(x,y,s=75,c=t,marker='+',alpha=.5)
plt.subplot(235)
plt.scatter(x,y,s=75,c=t,marker='+',alpha=.5)
plt.subplot(236)
plt.scatter(x,y,s=75,c=t,marker='+',alpha=.5)
plt.figure()
# 两行两列第一个位置
plt.subplot(221)
plt.scatter(x,y,s=75,c=t,marker='+',alpha=.5)
plt.subplot(222)
plt.scatter(x,y,s=75,c=t,marker='+',alpha=.5)
plt.subplot(223)
plt.scatter(x,y,s=75,c=t,marker='+',alpha=.5)
plt.subplot(224)
plt.scatter(x,y,s=75,c=t,marker='+',alpha=.5)
plt.show()
-
Matplotlib(十)
窗格布局——2
import matplotlib.gridspec as gridspec
# method1
plt.figure(figsize=(10, 6), dpi=80)
# 创建子窗口,基准窗格大小为3,3起始位置0,0,子窗口大小为3列1行
ax1 = plt.subplot2grid((3,3),(0,0),colspan=3, rowspan=1)
ax1.plot([1,2],[2,3])
ax1.set_title('ax1_title')
ax2 = plt.subplot2grid((3,3),(1,0),colspan=2)
ax3 = plt.subplot2grid((3,3),(1,2),rowspan=2)
ax4 = plt.subplot2grid((3,3),(2,0))
ax4 = plt.subplot2grid((3,3),(2,1))
plt.show()
# method2
plt.figure(figsize=(10, 6), dpi=80)
# 划分出3,3列表
gs = gridspec.GridSpec(3,3)
# 取索引到第0行,的全部
ax1 = plt.subplot(gs[0,:])
ax2 = plt.subplot(gs[1,:2])
ax3 = plt.subplot(gs[1:,2])
ax4 = plt.subplot(gs[-1,0])
ax5 = plt.subplot(gs[-1,-2])
plt.show()
# method3
# 定义2,2的窗格,共享x,y轴,返回ax1...和f(object)
f,((ax1,ax2),(ax3,ax4)) = plt.subplots(2,2,sharex=True,sharey=True)
ax1.scatter([1,2],[1,2])
# f.set_figure([20, 6])
# 需要设置figure的参数就f.设置
plt.show()
-
Matplotlib(十一)
窗格布局——3
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure(figsize=(10, 6), dpi=80)
x = range(10)
y = sort(np.random.uniform(1,10,10))
# 在figure中,距离左侧和底部各figure的10%的宽度,创建子窗口,长宽各为figure的80%
left,bottom,width,height = 0.1,0.1,0.8,0.8
ax1 = fig.add_axes([left,bottom,width,height])
ax1.plot(x,y,'r',alpha=.5)
ax1.set_xlabel('x')
ax1.set_ylabel('y')
ax1.set_title('title')
left,bottom,width,height = 0.2,0.6,.25,.25
ax2 = fig.add_axes([left,bottom,width,height])
ax2.plot(x,y,'g',alpha=.5)
ax2.set_xlabel('x')
ax2.set_ylabel('y')
ax2.set_title('title inside 1')
plt.axes([.6,.2,.25,.25])
# 这里的plt设置的是上面这行的axes状态
plt.plot(y[::-1],x,'y')
plt.xlabel('x')
plt.ylabel('y')
plt.title('title inside 2')
plt.show()
-
Matplotlib(十二)
下面是镜像反转图像
x = np.arange(0,10,.1)
y1 = np.pi * x **2
y2 = -1 * y1
fig, ax1 = plt.subplots()
# twinx把ax1使用镜面效果把y1轴反转至右侧
fig.set_dpi(80)
fig.set_figwidth(8)
fig.set_figheight(12)
ax2 = ax1.twinx()
a1, =ax1.plot(x,y1,'r-.',linewidth=3,alpha=.6)
a2, =ax2.plot(x,y2,'g--',linewidth=3,alpha=.6)
ax1.set_xlabel('X Label',size=20)
ax1.set_ylabel('Y1',color='r',size=20,alpha=.6)
ax2.set_ylabel('Y2',color='g',size=20,alpha=.6)
plt.legend(handles=[a1, a2,], labels=['r-line', 'g-line',], loc= 'best')
plt.show()
-
Matplotlib(十三)
最后一个图例,plot动画效果~
from matplotlib import animation
fig,ax = plt.subplots()
fig.set_figwidth(7)
fig.set_figheight(7)
x = np.arange(0,8*np.pi,0.01)
line, = ax.plot(x,np.sin(x),'c-.',linewidth=3,alpha=.8)
def animate(i):
line.set_ydata(np.sin(x+i/50))
return line,
def init():
line.set_ydata(np.sin(x))
return line,
'''
定义动画,FuncAnimation为其中一种方法
传入一个fig,func就是传入一个animating的func,frames表示总帧数,init_func为动画的第一帧,
interval为更新频率,blit是不是要更新变化点,没有变化点不更新.整图更新为False
'''
ani = animation.FuncAnimation(fig=fig,func=animate,frames=100,
init_func=init,interval=20,
blit=False
)
plt.show()
网友评论