• (3) python--matplotlib


    (一)1.如何绘制散点图

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import numpy as np
    import matplotlib.pyplot as plt
     
    # 如何绘制散点图
    # 先随机生成数据
    = np.array(range(100))
    = np.sin(x)
     
    # 直接输入x和y便可绘制相应的散点图
    plt.scatter(x, y)
    # 不要忘了这句话,表示让图像显示
    plt.show()

      

    可以看到类似于正弦曲线一样的点

    (一)2.如何给散点图加上样式

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import numpy as np
    import matplotlib.pyplot as plt
     
    = np.array(range(01005))
    = 3 * + 2
     
    # scatter里面的参数有很多,不过我们主要使用四种
    # 1:s,表示点的面积,注意是面积。
    # 2:c,颜色,不指定默认为蓝色
    # 3:marker:点的形状,不指定默认为点
    # 4:alpha:透明度,不指定默认为1,表示透明度为0
    plt.scatter(x, y, s=100, c="green", marker="<", alpha=0.1)
     
    plt.show()

      

    (二)1.如何绘制折线图

    1
    2
    3
    4
    5
    6
    7
    8
    9
    import numpy as np
    import matplotlib.pyplot as plt
     
    = np.linspace(-11100)
    = ** 2
     
    plt.plot(x, y)
    # 此外还有一个plt.plot_date()函数,专门用来绘制有一个轴是日期格式的数据
    plt.show()

      

    (二)2.如何给折线图加上样式

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    import numpy as np
    import matplotlib.pyplot as plt
     
    = np.linspace(-101020)
    = ** 2
    = * 2 + 1
     
    # 关于样式的参数有很多
    # linestyle:表示线段的样式
    # color:表示颜色
    # marker:表示点的样式
    plt.plot(x, y, linestyle="-", color="green", marker="o")
    plt.plot(x, z, linestyle="--", color="red", marker="<")
     
    plt.show()

      

    (三)1.如何绘制条形图

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    import numpy as np
    import matplotlib.pyplot as plt
     
    # 还记得每一个图对应的每一个函数吗?
    # 散点图:scatter
    # 折线图:plot
    # 条形图:bar
     
    # 这个函数可以只接收两个参数,分别是条形图中每一条的索引和高度
    plt.bar(x=[012345], height=[112233445566])
    plt.show()

      

    (三)2.如何给条形图加上样式

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import matplotlib.pyplot as plt
     
    # color:颜色
    # width:线条宽度
    plt.bar(x=[012345],
            height=[112233445566],
            color="green",
            width=0.2)
     
    plt.show()

      

    (三)3.如何绘制横向的条形图

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import matplotlib.pyplot as plt
     
    # 如果绘制横向的条形图
    # 那么bottom相当于之前的x,width相当于之前的height
    plt.bar(x=0,
            bottom=[012345],
            width=[112233445566],
            color="green",
            height=0.2,
            orientation="horizontal")
    # 还有一个plt.barh(),表示花水平的条形图,不用显示的指定orientation="horizontal",但其他的参数还是要有的
    plt.show()

      

    (四)1.如何绘制直方图

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import numpy as np
    import matplotlib.pyplot as plt
     
    mu = 100
    sigma = 20
    = mu + sigma * np.random.randn(2000)
     
    # 设置直方图
    # bins:表示要分成多少个区间
    # normed:表示是否进行标准化,标准化之后,那么纵坐标不在是个数,而是频率。
    plt.hist(x, bins=30, color="red", density=True)
    plt.show()

      

     (四)2.如何绘制双变量直方图

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import numpy as np
    import matplotlib.pyplot as plt
     
    = np.random.randn(1000)+2
    = np.random.randn(1000)+3
     
     
    plt.hist2d(x, y, bins=40)
     
    plt.show()

      

    (五)1.如何绘制饼图

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import matplotlib.pyplot as plt
     
    labels = ["satori""mashiro""nagisa"]
    fracs = [403030]
     
    # 最重要的两个参数
    # x:所占的份额
    # labels:对应的标签
    plt.pie(x=fracs, labels=labels)
    plt.show()

      

    细心地哲学♂家可能回好奇,为什么是一个椭圆,这是因为我们这里少了一句话

    而且每一块上面光秃秃的,每个部分都贴在了一块,也不好看,我们也可以设置一些参数,让其变得好看一些

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import matplotlib.pyplot as plt
     
    labels = ["satori""mashiro""nagisa"]
    fracs = [403030]
     
    # 加上这句话表示x和y轴的比例是一比一
    # 因此图形就变成了圆形
    plt.axes(aspect=1)
    # autopct:表示每一块的比例
    # explode:突出显示,每个部分不会贴在一块<br><br># shadow:表示加上一层阴影,指定为True即可
    1
    plt.pie(x=fracs, labels=labels, autopct="%.0f%%", explode=[0.010.020]) plt.show()

      

     (六)1.如何绘制箱形图

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import matplotlib.pyplot as plt
    import numpy as np
     
    np.random.seed(100)
    data = np.random.normal(01, size=1000)
     
    # sym:形状,表示异常值的形状
    # whis:表示虚线的长度,可以控制异常值显示的多少,越大虚线越长
    plt.boxplot(data, sym="<", whis=1.5)
    plt.show()

      

    (七)颜色和样式

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    蓝色 - 'b'
     
    绿色 - 'g'
     
    红色 - 'r'
     
    青色 - 'c'
     
    品红 - 'm'
     
    黄色 - 'y'
     
    黑色 - 'k' 
     
    白色 - 'w'

      

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    '.'       point marker
    ','       pixel marker
    'o'       circle marker
    'v'       triangle_down marker
    '^'       triangle_up marker
    '<'       triangle_left marker
    '>'       triangle_right marker
    '1'       tri_down marker
    '2'       tri_up marker
    '3'       tri_left marker
    '4'       tri_right marker
    's'       square marker
    'p'       pentagon marker
    '*'       star marker
    'h'       hexagon1 marker
    'H'       hexagon2 marker
    '+'       plus marker
    'x'       x marker
    'D'       diamond marker
    'd'       thin_diamond marker
    '|'       vline marker
    '_'       hline marker

      

    1
    2
    3
    4
    '-' solid line style
    '--' dashed line style
    '-.' dash-dot line style
    ':' dotted line style

      输入样式的时候还有一个简便的方法,cx--,c是青色,x是点的样式,--是线的样式

    (八)1.如何绘制子图

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    import numpy as np
    import matplotlib.pyplot as plt
     
    = np.arange(01005)
     
    # 生成一个画布
    fig = plt.figure()
     
    # 往画布上添加对象
    # 这里的221表示,生成一个2X2的画布,并处于第一个位置
    s1 = fig.add_subplot(221)
    s2 = fig.add_subplot(222)
    s3 = fig.add_subplot(223)
    s4 = fig.add_subplot(224)
    y1 = np.exp(x)
    y2 = np.sin(x)
    y3 = np.cos(x)
    y4 = ** 2
     
    s1.plot(x, y1, "cx--")
    s2.plot(x, y2, "bo-.")
    s3.plot(x, y3, "g<--")
    s4.plot(x, y4, "y>-.")
     
    # 最后显示要用fig,因为它是我们创建出来的画布,必须要让它显示
    fig.show()

      

    (八)2.如何绘制子图

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    import numpy as np
    import matplotlib.pyplot as plt
     
    = np.arange(01005)
     
    plt.subplot(221)
    plt.plot(x, np.exp(x))
    plt.subplot(222)
    plt.plot(x, np.sin(x))
    plt.subplot(223)
    plt.plot(x, np.cos(x))
    plt.subplot(224)
    plt.plot(x, x**2)
     
    plt.show()

      

    (九)如何绘制网格

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import numpy as np
    import matplotlib.pyplot as plt
     
    = np.arange(01005)
     
    # 绘制出格子
    plt.grid(x, color="green")
    # 绘制线段
    plt.plot(x, x, "cx--")
    plt.show()

      

    (十)如何给图像带上标记

    import numpy as np
    import matplotlib.pyplot as plt

    x = np.linspace(-1, 1, 100)
    y1 = np.sin(x)
    y2 = np.cos(x)
    y3 = np.tan(x)

    # 加上需要的标签label
    plt.plot(x, y1, label="np.sin")
    plt.plot(x, y2, label="np.cos")
    plt.plot(x, y3, label="np.tan")

    # 必须加上这句话,否则标签不显示
    # legend里面还有一个location参数,可以指定位置
    # 以及ncol可以指定要标签分几列显示

    plt.legend()

    plt.show()

      

     (十一)调整坐标轴范围

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import numpy as np
    import matplotlib.pyplot as plt
     
    = np.arange(-100100)
    = 3 * + 1
     
    plt.plot(x, y)
    # 表示x轴从-10到10,y轴-100到100<br># 也可以通过plt.xlim([,])和plt.ylim([,])只调x轴或y轴<br># 如果只想调整一边的话,就直接指定最大或者最小,xlim(xmin=,xmax=),ylim(ymin=,ymax=)
    plt.axis([-1010-100100])
    plt.show()

      

    (十二)调整坐标轴刻度

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    import numpy as np
    import matplotlib.pyplot as plt
     
    = np.arange(110)
     
    plt.plot(x, x)
     
    # 获取坐标轴属性,get current axis
    ax = plt.gca()
    # nbins表示有多少间隔,可以看到分成了20份
    ax.locator_params(nbins=20)
    # 如果我只想调整某一个轴的话
    # 指定ax.locator_params("x", nbins=20)
     
    plt.show()

      

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    import numpy as np
    import matplotlib.pyplot as plt
    import matplotlib as mpl
    import datetime
     
    start = datetime.date(201611)
    end = datetime.date(201711)
    timedelta = datetime.timedelta(days=1)
     
    date = mpl.dates.drange(start, end, timedelta)
    = np.random.rand(len(date))
     
    ax = plt.gca()
    plt.plot_date(date, y)
     
    # 设置时间格式
    date_format = mpl.dates.DateFormatter("%Y-%m-%d")
     
    # 将格式应用到x轴上
    ax.xaxis.set_major_formatter(date_format)
     
    plt.show()

      

    (十三)如何添加坐标轴

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    import numpy as np
    import matplotlib.pyplot as plt
     
    = np.arange(2201)
     
    y1 = x
    y2 = np.log(x)
     
    fig = plt.figure()
     
    ax1 = fig.add_subplot(111)
     
    ax1.plot(x, y1)
    ax1.set_ylabel("mashiro")
     
    # 表示生成一个双胞胎y轴,twinx,表示生成一个y轴
    ax2 = ax1.twinx()
     
    ax2.plot(x, y2)
    ax2.set_ylabel("satori")
     
    fig.show()

      

    (十四)添加注释

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    import numpy as np
    import matplotlib.pyplot as plt
     
    = np.arange(-1011)
     
    = ** 2
     
    plt.plot(x, y)
     
     
    plt.annotate("my name is satori",
                 xy=(05),  # 箭头坐标
                 xytext=(020),  # 文本坐标
                 arrowprops={"facecolor""r",  # 颜色
                             "headlength"10,  # 箭头的长度
                             "headwidth"30,  # 箭头的头的宽度
                             "width"20  # 箭头的身体的宽度
                             }
                 )
     
    plt.show()

      

    (十五)如何绘制3D图形

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    import matplotlib.pyplot as plt
    import numpy as np
    from mpl_toolkits.mplot3d import Axes3D as A3
     
    fig = plt.figure()
    ax = A3(fig)
    = np.arange(-440.2)
    = np.arange(-440.2)
    x, y = np.meshgrid(x, y)
    = np.power(x, 2+ np.power(y, 2)
    plt.title("satori")
     
    # rstride,cstride表示行列每隔多少个点建一个面,cmap表示颜色
    ax.plot_surface(x, y, z, rstride=1,
                    cstride=1,
                    cmap=plt.cm.CMRmap,
                    alpha=0.4)
    ax.set_xlabel('x_label', color='r')
    ax.set_ylabel('y_label', color='g')
    ax.set_zlabel('z_label', color='b')
     
    plt.show()

      

    如何解决中文乱码问题

    1
    2
    3
    4
    import matplotlib.pyplot as plt
     
    plt.rcParams['font.sans-serif'= ['SimHei'# 步骤一(替换sans-serif字体)
    plt.rcParams['axes.unicode_minus'= False   # 步骤二(解决坐标轴负数的负号显示问题)

      

     解决子图重合问题

    plt.tight_layout()

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    import numpy as np
    import matplotlib.pyplot as plt
     
    = np.arange(1100)
    = 2 * x
     
    plt.plot(x, y)
    # 调整x,y轴的取值范围
    plt.xlim(1030)
    plt.ylim(2060)
     
    # 调整x或y轴的间隔
    ax = plt.gca()
    ax.locator_params("x", nbins=40)
     
    # 调整x或y轴坐标的倾斜程度
    plt.xticks(rotation=60)
    plt.show()

     

  • 相关阅读:
    (转)elasticsearch collapse 折叠字段应用
    java 8 supplier object区别
    搜索 rerank : learn to rank 算法
    Runtime.addShutdownHook用法
    MAT(memory anlayzer tool)使用方法
    win10 打开注册表
    关于svn 更新到本地库 图标不显示问题(二)
    如何重启explorer,不用重启电脑 也能使设置生效
    关于svn 更新到本地库 图标不显示问题(一)
    eclipse 编写完JAVA的代码 ctrl+s保存一下,右下角就有building workspace一直在执行。。特别卡、卡、、
  • 原文地址:https://www.cnblogs.com/valorchang/p/11397947.html
Copyright © 2020-2023  润新知