美文网首页数据可视化
那些年研究过的可视化图例Matplotlib(下)

那些年研究过的可视化图例Matplotlib(下)

作者: 我叫钱小钱 | 来源:发表于2018-06-30 21:04 被阅读8次

    接着上篇,下篇主要是一些进阶三维和动态图例,如果对大家有帮助,希望能得到你们关注和点赞!正所谓赠人玫瑰收留余香。

    • 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()
    

    相关文章

      网友评论

        本文标题:那些年研究过的可视化图例Matplotlib(下)

        本文链接:https://www.haomeiwen.com/subject/cydxuftx.html