美文网首页Matplotlib机器学习爱好者
matplotlib 数据可视化 - 3D图

matplotlib 数据可视化 - 3D图

作者: 东南有大树 | 来源:发表于2018-11-29 11:23 被阅读11次
    import matplotlib.pyplot as plt
    import numpy as np
    

    若想实现3D图像,需要使用mplot3d工具集,它是matplotlib的内置标配。

    mplot3d仍然使用Figure对象,只不过Axes对象要替换为该工具集的Axes3d对象。因此,使用Axes3D对象前,需先将其导入进来。

    from mpl_toolkits.mplot3d import Axes3D
    

    3D曲面

    '''使用figure对象'''
    fig = plt.figure()
    '''创建3D轴对象'''
    ax = Axes3D(fig)
    '''X坐标数据'''
    X = np.arange(-2,2,0.1)
    '''Y坐标数据'''
    Y = np.arange(-2,2,0.1)
    '''计算3维曲面分格线坐标'''
    X,Y = np.meshgrid(X,Y)
    '''用于计算X/Y对应的Z值'''
    def f(x,y):
        return (1-y**5+x**5)*np.exp(-x**2-y**2)
    '''plot_surface函数可绘制对应的曲面'''
    ax.plot_surface(X,Y,f(X,Y),rstride=1,cstride=1)
    '''显示'''
    plt.show()
    

    修改曲面颜色

    使用cmap属性可指定曲面颜色。

    '''使用figure对象'''
    fig = plt.figure()
    '''创建3D轴对象'''
    ax = Axes3D(fig)
    '''X坐标数据'''
    X = np.arange(-2,2,0.1)
    '''Y坐标数据'''
    Y = np.arange(-2,2,0.1)
    '''计算3维曲面分格线坐标'''
    X,Y = np.meshgrid(X,Y)
    '''用于计算X/Y对应的Z值'''
    def f(x,y):
        return (1-y**5+x**5)*np.exp(-x**2-y**2)
    '''plot_surface函数可绘制对应的曲面'''
    ax.plot_surface(X,Y,f(X,Y),rstride=1,cstride=1,cmap=plt.cm.hot)
    '''显示'''
    plt.show()
    

    将曲面旋转一定角度

    使用view_init() 函数可将曲面进行旋转,该函数有两个参数,分别是elev和azim,第一个参数指从哪个高度查看曲面,第二个参数指旋转的角度。

    '''使用figure对象'''
    fig = plt.figure()
    '''创建3D轴对象'''
    ax = Axes3D(fig)
    '''X坐标数据'''
    X = np.arange(-2,2,0.1)
    '''Y坐标数据'''
    Y = np.arange(-2,2,0.1)
    '''计算3维曲面分格线坐标'''
    X,Y = np.meshgrid(X,Y)
    '''用于计算X/Y对应的Z值'''
    def f(x,y):
        return (1-y**5+x**5)*np.exp(-x**2-y**2)
    '''plot_surface函数可绘制对应的曲面'''
    ax.plot_surface(X,Y,f(X,Y),rstride=1,cstride=1,cmap=plt.cm.hot)
    '''旋转'''
    ax.view_init(elev=30,azim=125)
    '''显示'''
    plt.show()
    

    3D散点图

    3D散点图的绘制使用scatter() 函数来绘制出散点,然后再作用于 Axes3D 对象上。

    xs = np.random.randint(30,40,100)
    ys = np.random.randint(20,30,100)
    zs = np.random.randint(10,20,100)
    xs2 = np.random.randint(50,60,100)
    ys2 = np.random.randint(30,40,100)
    zs2 = np.random.randint(50,70,100)
    xs3 = np.random.randint(10,30,100)
    ys3 = np.random.randint(40,50,100)
    zs3 = np.random.randint(40,50,100)
    fig = plt.figure()
    ax = Axes3D(fig)
    ax.scatter(xs,ys,zs)
    ax.scatter(xs2,ys2,zs2,c='r',marker='^')
    ax.scatter(xs3,ys3,zs3,c='g',marker='*')
    ax.set_xlabel('X label')
    ax.set_ylabel('Y label')
    ax.set_zlabel('Z label')
    plt.show()
    

    3D 条状图

    在绘制3D条状图的时候,同样只需要将bar()函数应用于Axes3D对象即可。

    x = np.arange(8)
    y = np.random.randint(0,10,8)
    y2 = y + np.random.randint(0,3,8)
    y3 = y2 + np.random.randint(0,3,8)
    y4 = y3 + np.random.randint(0,3,8)
    y5 = y4 + np.random.randint(0,3,8)
    clr = ['red','green','blue','black','white','yellow','orange','pink']
    fig = plt.figure()
    ax = Axes3D(fig)
    ax.bar(x,y,0,zdir='y',color=clr)
    ax.bar(x,y2,10,zdir='y',color=clr)
    ax.bar(x,y3,20,zdir='y',color=clr)
    ax.bar(x,y4,30,zdir='y',color=clr)
    ax.bar(x,y5,40,zdir='y',color=clr)
    ax.set_xlabel('X label')
    ax.set_ylabel('Y label')
    ax.set_zlabel('Z label')
    plt.show()
    

    相关文章

      网友评论

        本文标题:matplotlib 数据可视化 - 3D图

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