• matplotlib基础(2)


    以下将展示各种图的画法

    默认已经import,需要额外import的代码里有加

    import matplotlib
    import numpy as np
    import matplotlib.pyplot as plt

    1.散点图

    核心为plt.scatter()

    最简单的散点图只需要5行代码(还能更少)

    n=1024
    x = np.random.randn(n)
    y = np.random.randn(n)
    plt.scatter(x,y)
    plt.show()

     接下来我们改表一些参数再画一个

    # unit area ellipse
    rx, ry = 3., 1.
    area = rx * ry * np.pi
    theta = np.arange(0, 2 * np.pi + 0.01, 0.1)
    verts = np.column_stack([rx / area * np.cos(theta), ry / area * np.sin(theta)])
    x, y, s, c = np.random.rand(4, 300)#随机产生0到1的均匀分布的随机样本#不信你可以试试randn()
    s *= 10**2.
    fig, ax = plt.subplots()
    ax.scatter(x, y, s=s, c=c, marker=verts,alpha=0.6)
    plt.show()

     scatter()中必须带x,y这两个参数,c和s分别待变color和size,这里的marker用来指定样式

    这个verts是怎么产生这个样式的我是不懂,可以跳过直接查看样式就行

    具体样式官方文档如下https://matplotlib.org/api/markers_api.html#module-matplotlib.markers

    2.柱状图

    核心为plt.bar()

    还是先来个简单的

    x = np.arange(12)
    y = np.arange(2,14)
    plt.bar(x,y)#x,y需要1对1
    plt.show()

     再来个美观的

    n =12
    X = np.arange(n)
    y1 = (1-X/float(n)) *np.random.uniform(0.5,1.0,n)
    y2 = (1-X/float(n)) *np.random.uniform(0.5,1.0,n)
    plt.bar(X,y1,facecolor = '#9999ff',edgecolor='white')
    plt.bar(X,-y2,facecolor = '#ff9999',edgecolor='white')#这里的facecolor为特地颜色对应的色号
    for x,y in zip(X,y1):
        plt.text(x,y+0.01,'%.2f'%y,ha = 'center',va = 'bottom')#ha为水平对齐方式
    for x,y in zip(X,y2):
        plt.text(x,-y-0.01,'%.2f'%y,ha = 'center',va = 'top')#va为竖直对齐方式
    plt.axis('off')
    plt.show()

     3.等高线图

    核心contour([X, Y,] Z, [levels], **kwargs)

    [X,Y]:Z中值的坐标。   如下代码中的X,Y坐标

    Z:绘制轮廓的高度值。   如下代码中的f(X,Y)

    levels:确定轮廓线/区域的数量和位置。 如下代码中的8,代表分成10部分

    def f(x,y):
        #计算高度的函数,这就是一个公式
        return (1 - x/2 + x**5 + y**3) *np.exp(-x**2 -y**2)
    n=256
    x = np.linspace(-3,3,n)
    y = np.linspace(-3,3,n)
    X,Y = np.meshgrid(x,y)#绑定网格值
    
    plt.contourf(X,Y,f(X,Y),8,alpha=0.75,cmap = plt.cm.hot)#风格,可以改为cm.cool
    #contour和contourf都是画三维等高线图的,不同点在于contour() 是绘制轮廓线,contourf()会填充轮廓
    C = plt.contour(X,Y,f(X,Y),8,color='black',linewidths=.5)
    
    plt.clabel(C,inline = True,fontsize=10)#这是画出等高线上的数值,inline代表是否在线里标注
    plt.axis('off')
    plt.show()

     如果不理解8这个参数,将它改为0看看效果如下,就只有两部分了

     4.3D图像

    这里需要单独import

    import matplotlib.pyplot as plt
    from matplotlib import cm
    from matplotlib.ticker import LinearLocator, FormatStrFormatter
    import numpy as np
    fig = plt.figure()
    ax = fig.gca(projection='3d')
    # Make data.这里是产生数据
    X = np.arange(-5, 5, 0.25)
    Y = np.arange(-5, 5, 0.25)
    X, Y = np.meshgrid(X, Y)#返回坐标矩阵。
    R = np.sqrt(X**2 + Y**2)
    Z = np.sin(R)
    # Plot the surface.#camp为颜色样式,antialiased为指定是否抗锯齿
    surf = ax.plot_surface(X, Y, Z, cmap=cm.coolwarm, linewidth=0, antialiased=False)
    #到这里就可以完成画图的工作了,下面的是一些修饰代码,可以要
    # Customize the z axis. #ax.set_zlim(-1.01, 1.01) #ax.zaxis.set_major_locator(LinearLocator(10)) #ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f')) # Add a color bar which maps values to colors. #fig.colorbar(surf, shrink=0.5, aspect=5) plt.show()

     5.让图动起来

    核心:animation.FuncAnimation()具体参数在注释中有

    import numpy as np
    import matplotlib.pyplot as plt
    from matplotlib import animation
    fig,ax = plt.subplots()
    x = np.arange(0,2*np.pi,0.01)
    line , = ax.plot(x,np.cos(x))#返回的是列表
    def animate(i):
        line.set_ydata(np.cos(x+i/10))
        return  line,
    def init():
        line.set_ydata(np.cos(x))
        return line,
    ani = animation.FuncAnimation(fig=fig,func = animate,frames=100,init_func=init,interval=20,blit=False)
    #fig:用于获取绘制,调整大小以及任何其他所需事件的图形对象
    #fcunc:提供之后的其他位置参数
    #frame:如果是整数,则等于传递范围(帧)
    #init_func:用于绘制清晰框架的功能。如果未给出,将使用帧序列中第一项的绘制结果。在第一帧之前将调用此函数一次。
    #interval:帧之间的延迟(以毫秒为单位)。默认为200。
    #blit:是否覆盖之前的默认False
    plt.show()

    效果就是这张图会不停的刷新

  • 相关阅读:
    2-SAT模板
    AC自动机
    省选预备营-Day3(图论) 总结
    省选预备营-Day2(分治) 总结
    左偏树(可并堆)总结
    省选预备营-Day1(数据结构) 总结
    OI基础知识
    C++ 堆
    CH4601 普通平衡树
    java 函数形参传值和传引用的区别
  • 原文地址:https://www.cnblogs.com/Truedragon/p/12901984.html
Copyright © 2020-2023  润新知