python的绘图包matplot

  • Matplot绘图

    • 导包:from matplotlib import pyplot as plt

      常用方法:

      • show():一般在最后面做图形显示,plt.show()

        plot():功能是传递数据,让其绘制图形,并且返回的是一个Line2D对象(每条线一个)

        • 如果接受的不是列表,只是值,就只会画点

          from matplotlib import pyplot as plt
          import numpy as np
          plt.plot(1, 2, "ro")
          plt.show()
    • 如果接受的数据是一个一维列表,默认会使用索引作为横坐标,元素值作为纵坐标

      from matplotlib import pyplot as plt
      plt.plot([1, 2, 4, 9, 5, 3])
      plt.show()

      如果接受的数据是两个一维列表,第一个列表元素值作为横坐标,第二个列表元素值作为纵坐标,而且两个值一一对应,形成一个一个坐标点一样

      from matplotlib import pyplot as plt
      plt.plot([1, 2, 3, 4, 5], [5, 4, 3, 2, 1])
      plt.show()
      • 如果使用其他包生成数据较为方便,如numpy

        from matplotlib import pyplot as plt
        import numpy as np
        x = np.linspace(-5, 5, 1000)    # linspace()的功能是在指定区间取n个等分点
        y = x**2
        plt.plot(x, y)
        plt.show()
      • 如果接受的数据是有三个参数,前两个参数和上面一样,第三个参数是线条的样式,又或者是接受的数据是三个三个出现,每三个就会组成一组, 或者分开写效果也是一样的,并且能为每条线设置成不同的样式,如线宽set_linewidth(),虚线风格set_dash_capstyle(),alpha级别(透明图)set_alpha()

      from matplotlib import pyplot as plt
      line1, line2 = plt.plot([1, 2, 3, 4, 5], [5, 4, 3, 2, 1], "g--", [5, 4, 3, 2, 1], [1, 2, 3, 4, 5], "r-")
          line1.set_linewidth(3.0)
      line1.set_dash_capstyle("round")
          line2.set_alpha(0.5)     # 范围值0-1
          plt.axis([0, 7, -2, 7])
          plt.show()
      • axis():坐标轴刻度根据数据范围自动匹配,想要让图形显示在更大的空间中可以通过调用 axis 函数指定每个坐标轴的范围,参数含义: [xmin, xmax, ymin, ymax]

        from matplotlib import pyplot as plt
        plt.plot([1, 2, 3, 4, 5], [5, 4, 3, 2, 1])
        plt.axis([0, 7, -2, 7])
        plt.show()

    title():在图表中增加标题,参数描述见例忘意

    • xlabel()、ylabel():在图表坐标轴上添加描述,参数描述见例忘意

    • grid():图表背景是否是格子的,默认为False

      savefig():保存图像

      from matplotlib import pyplot as plt
      import numpy as np
      x = np.linspace(-5, 5, 1000)    # linspace()的功能是在指定区间取n个等分点
      y = x**2
      plt.plot(x, y)
      plt.title("Square Function", fontsize=20)
        plt.xlabel("X", fontsize=16)
      plt.ylabel("y = $x^2$", fontsize=16)   # 里面的$就是解析^的,显示更为美观
        plt.grid(True)
        plt.savefig("my_square_function.png", transparent=True)
        plt.show()
      • subplot():添加子图。第一个参数表示几行,第二个参数表示几列,第三个参数表示第几个(先从左到右,后从上到下)

        from matplotlib import pyplot as plt
        import numpy as np
        x = np.linspace(-1.5, 1.5, 50)
        plt.figure(figsize=(10, 10))
        plt.subplot(3, 2, 1)   # subplot(3, 2, 1)可以简写subplot(321)
        plt.plot(x, x)
        plt.subplot(3, 2, 2)
        plt.plot(x, x**2)
        plt.subplot(3, 2, 3)
        plt.plot(x, x**3)
        plt.subplot(3, 2, 4)
        plt.plot(x, x**4)
        plt.subplot(3, 1, 3)   # 这样会将上面两行各看成一个
        plt.plot(x, np.sin(3*x))
        plt.show()
      • subplot2grid():如果需要更复杂的子图位置设置,可以使用subplot2grid函数代替subplot函数。先指定图形(figure)网格的行数和列数,然后指定子图(是指原有的子图,不算合并的子图)的位置(左上角位置为(0, 0)),然后根据需求设置子图需要占用的行数和列数。

        from matplotlib import pyplot as plt
        import numpy as np
        x = np.linspace(-1.5, 1,5, 50)
        plt.figure(figsize=(8, 6))
        # (3, 3)有9个子图,rowspan表示跨行,colspan表示跨列
        plt.subplot2grid((3,3), (0, 0), rowspan=2, colspan=2)   
        plt.plot(x, x**2)
        plt.subplot2grid((3,3), (0, 2))
        plt.plot(x, x**3)
        plt.subplot2grid((3,3), (1, 2), rowspan=2)
        plt.plot(x, x**4)
        plt.subplot2grid((3,3), (2, 0), colspan=2)
        plt.plot(x, x**5)
        plt.show()
      • figure():如果还想再原有的图像上添加线条,就可以指定figure

        from matplotlib import pyplot as plt
        import numpy as np
        x = np.linspace(-1.4, 1.4, 30)
        plt.figure(1)       # 第一块图像(可以说第一个结果)
        plt.subplot(211)
        plt.plot(x, x**2)
        plt.title("Square and Cube")
        plt.subplot(212)
        plt.plot(x, x**3)
        ​
        plt.figure(2, figsize=(10, 5))    #第二块图像(可以说第二结果)
        plt.subplot(121)
        plt.plot(x, x**4)
        plt.title("y = x**4")
        plt.subplot(122)
        plt.plot(x, x**5)
        plt.title("y = x**5")
        ​
        plt.figure(1)          # 指定第一块图像,但是是在212图表中画线条
        plt.plot(x, -x**3, "r:")
        plt.show()
      • text():绘制文本。前两个值表示文本显示的坐标点,第三个参数是文本内容,之后的参数是文本约束。掌握这种就行,其他的花里胡哨以后用到在

        from matplotlib import pyplot as plt
        import numpy as np
        ​
        x = np.linspace(-1.5, 1.5, 50)
        px = 0.8
        py = px ** 2
        ​
        plt.plot(x, x**2, "b-", px, py, "ro")
        # ha表示horizontalalignment
        plt.text(0, 1.5, "Square Function\ny = $x^2$", fontsize=20, color="blue", ha="center")
        # weight表示字体粗细
        plt.text(px-0.08, py, "Beautiful point", ha="right", weight="heavy")
        plt.text(px, py-0.3, "x = %0.2f\ny = %0.2f" % (px, py), rotation=50, color="gray")
        plt.show()
      • legend(loc="best"):为线条增加图例。需要在绘制线条的过程中增加一个label属性

        from matplotlib importpyplot as plt
        import numpy as np
        x = np.linspace(-1.5, 1.5, 50)
        plt.plot(x, x**2, "g--", label="y = $x^2$")
        plt.plot(x, x**3, "b-", label="y = $x^3$")
        plt.legend(loc="best")
        plt.show()
      • Matplotlib支持非线性缩放,例如对数曲线或分对数缩放(不常用,不做解释)

        from matplotlib import pyplot as plt
        import numpy as np
        x = np.linspace(0.1, 15, 500)
        y = x**3/np.exp(2*x)
        plt.figure(1)
        plt.plot(x, y)
        plt.yscale('linear')
        plt.title('linear')
        plt.grid(True)
        ​
        plt.figure(2)
        plt.plot(x, y)
        plt.yscale('log')
        plt.title('log')
        plt.grid(True)
        ​
        plt.figure(3)
        plt.plot(x, y)
        plt.yscale('logit')
        plt.title('logit')
        plt.grid(True)
        ​
        plt.figure(4)
        plt.plot(x, y - y.mean())
        plt.yscale('symlog', linthreshy=0.05)
        plt.title('symlog')
        plt.grid(True)
        ​
        plt.show()
      • 极坐标:只需在创建‘subplot’是设置projection属性为polar即可。(不常用,不做解释)

        from matplotlib import pyplot as plt
        import numpy as np
        radius = 1 
        theta = np.linspace(0, 2*np.pi*radius, 1000) 
        alpha = np.linspace(0, 2*np.pi, 100) 
        plt.subplot(111, projection='polar') 
        plt.plot(alpha, np.cos(5*alpha)) 
        # plt.plot(theta, np.sin(5*theta), "g-") 
        # plt.plot(theta, 0.5*np.cos(4*theta), "b-") 
        # plt.plot(alpha, alpha) 
        plt.show()
      • 3D图形:你需要导入Axes3D,Axes3D包含了3d图形。然后创建一个subplot设置‘projection’属性为‘3d’。这会返回一个Axes3DSubplot对象,你可以通过调用plot_surface设置x,y,z坐标增加可选的属性。(不常用, 不做解释)

        import matplotlib
        from matplotlib import pyplot as plt
        import numpy as np
        from mpl_toolkits.mplot3d import Axes3D
        ​
        x = np.linspace(-5, 5, 50)
        y = np.linspace(-5, 5, 50)
        X, Y = np.meshgrid(x, y)
        R = np.sqrt(X**2 + Y**2)
        Z = np.cos(R*2)
        ​
        figure = plt.figure(1, figsize=(12, 4))
        subplot3d = plt.subplot(111, projection="3d")
        surface = subplot3d.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=matplotlib.cm.coolwarm, linewidth=0.1)
        plt.show()
      • scatter():散点图绘制。前两个参数是点显示的坐标位置,s表示大小,c表示颜色,alpha表示透明度,edgcolor表示边框颜色

        from numpy.random import rand
        from matplotlib import pyplot as plt
        ​
        for color in ["red", "green", "blue", "pink"]:
            # rand功能:第一个参数表示返回值的个数,第二个参数表示一个返回值的元素有多少个,元素值都在0-1
            # randn功能:一样,元素值是从标准正态分布中获取
            x, y, w = rand(3, 100)
            w = 500 * w**5
            plt.scatter(x, y, s=w, c=color, alpha=0.5, edgecolors="blue")
        plt.grid(True)
        plt.show()
        ​
      • hist():绘制直方图的使用。第一个参数是一系列的数据,第二个参数是这些数据定义一个一个范围,第三个参数就是柱子的宽度。绘制的直方图就是对范围的统计数

        from matplotlib import pyplot as plt
        from numpy.random import rand
        ​
        data = list(map(lambda x: int(x), rand(1, 10)[0]*40))
        print(data)
        plt.subplot(211)
        ​
        plt.hist(data, bins=10, rwidth=0.8)
        ​
        plt.subplot(212)
        plt.hist(data, bins=[0, 8, 16, 24, 32, 40], rwidth=0.95)
        ​
        plt.show()
      • 直方图的另一种表现形式

        from matplotlib import pyplot as plt, animation
        import numpy as np
        ​
        data1 = np.random.randn(400)
        data2 = np.random.randn(500) + 3
        data3 = np.random.randn(450) + 6
        data4a = np.random.randn(200) + 9
        data4b = np.random.randn(100) + 10
        ​
        plt.hist(data1, bins=5, color='g', alpha=0.75, label='bar hist')
        # default histtype='bar'
        plt.hist(data2, color='b', alpha=0.65, histtype='stepfilled', label='stepfilled hist')
        plt.hist(data3, color='r', histtype='step', label='step hist')
        plt.hist((data4a, data4b), color=('r', 'm'), alpha=0.55, histtype='barstacked', label=('barstacked a', 'barstacked b'))
        plt.xlabel("Value")
        plt.ylabel("Frequency")
        plt.legend()
        plt.grid(True)
        plt.show()

         

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值