zoukankan      html  css  js  c++  java
  • Day04-黑马学习篇(一)matplot画图基本要点

    一、为什么要学习matplotlib?

           (1)能够将数据进行可视化。

           (2)使数据更加直观、更具说服力。

    二、什么是matplotlib

           底层绘图库,主要做数据可视化图表,名称取材于MATLAB,模仿MATLAB构建

    三、Matplotlib基本要点

           1、

          

        (1)红色的点是坐标点,有点无线散点图,有线无点折线图。

           2、假设一天中每隔两小时(range(2,26,2))的气温分别是[15,13,14.5,17,20,25,26,27,22,18,15]

        (1)如果我们把气温视作y轴坐标,时间视为x轴坐标,两者相应的数据个数必须是一一对应的。

        (2)range函数可以取步长但range不能代替列表,后面会详细讲到。

        (3)在绘图前要准备好两轴的数据(可迭代对象)

           3、matplotlib下有专用的模块pyplot模块帮助绘制图形,导入规则:

        (1)plot函数会帮助我们将数据一一对应,不需要手动去对应(绘制的是折线图),对应前面的那句话:x和y轴数据个数必须一一对应。

        (2)show函数会帮助我们将图形展示出来

           4、matplotlib会自动帮我们设置刻度、图形大小等图形元素,我们可以自己修改

                  目前存在问题:

                                (1)设置图片大小(高清无码的大图)

                                (2)保存到本地

                                (3)描述信息,比如x轴和y轴表示什么,这个图的标题是什么

                                (4)调整x或者y的刻度的间距

                                (5)线条的样式(比如颜色,透明度等)

                                (6)标记出特殊的点(最低点和最高点等)

                                (7)给图片添加水印(防止盗用)

           5、设置图片大小

        (1)调用figure方法,figsize表示设置图片的宽和高,dpi表示每英寸点的个数,调整图片的清晰度

           6、图片的保存

        (1)绘制之后保存,savefig方法设置保存的地址,可以保存为svg矢量图格式,在网页中放大不会产生失真

           7、设置刻度

        (1)xticks()可以设置x的刻度,如果直接传入x,它会将每个x的刻度都传入进去作为x轴,也可以手动传入列表设置刻度(创建列表手动设置步长,在传入列表后还可以二次设置步长)

        (2)yticks()可以设置y的刻度,我们通常将y轴最大值和最小值引入代表最高刻度和最低刻度。

    from matplotlib import pyplot as plt
    
    #数据在x轴的位置,是一个可迭代对象
    x = range(2,26,2)
    #数据在y轴的位置,是一个可迭代的对象.与x轴元素的个数一一对应
    y = [15,13,14.5,17,20,25,26,26,24,22,18,15]
    #设置图片大小
    plt.figure(figsize=(20,8),dpi=80)
    
    #绘制图形
    plt.plot(x,y)
    
    #设置x轴刻度
    _xtick_labels = [i/2 for i in range(4,49)] #创建列表作为初始刻度
    plt.xticks(_xtick_labels[::3]) #二次设置步长规定自己想要的效果
    #设置y轴刻度
    plt.yticks(range(min(y),max(y)+1))
    
    #保存图片
    # plt.savefig("./t1.png")
    #展示图形
    plt.show()

           8、小测试1:如果列表a表示10点到12点的每一分钟的气温,如何绘制折线图观察每分钟气温的变化情况   a = [random.randint(20,35) for I in range(120)]

           9、优化图像:对于上面的气温变化图像,我们需要将横坐标修改为字符串形式的时间轴。之所以在xticks中传入两个参数是为了让数字和字符串之间形成对应。range函数返回的是一个可迭代对象,但这个对象并非列表,所以要用list()将可迭代对象转化为列表进行对应操作。(注:在没有用到字符串形式的时候不需要考虑,x轴的刻度可以随意规定)

           10、设置中文显示:

        (1)第一种方法(适用于windows、linux):

          

         (2)我采用了一劳永逸的方法,直接修改matplotlib的内置文件

    ###############第一步###################

    将中文字体复制到matplotlib的字体目录中

    matplotlib默认安装在 %PythonPath%Libsite-packages 目录下。复制微软雅黑字体到 %PythonPath%Libsite-packagesmatplotlibmpl-datafonts tf 中

    ###############第一步###################
    配置文件matplotlibrc,如下图方式修改即可。

           11、添加描述信息

        (1)x轴标签的添加调用函数xlabel()

        (2)y轴标签的添加调用函数ylabel()

        (3)图标题的添加调用函数titile()

    from matplotlib import pyplot as plt
    import random
    import matplotlib
    
    
    x = range(0,120)
    y = [random.randint(20,35) for i in range(120)]
    
    plt.figure(figsize=(20,8),dpi=80)
    
    plt.plot(x,y)
    #设置x轴刻度
    _xtick_labels = ["10点{}分".format(i) for i in range(60)]
    _xtick_labels += ["11点{}分".format(i) for i in range(60)]
    #取步长,数字和字符串一一对应,数据的长度一样
    plt.xticks(list(x)[::3],_xtick_labels[::3],rotation=45)
    #添加描述信息
    plt.xlabel("时间")
    plt.ylabel("温度 单位(℃)")
    plt.title("10到12点每3分钟的气温变化情况")
    
    plt.show()

           12、小测验2:(图例部分看后面一章节学习后再进行)

          假设大家在30岁的时候,根据自己的实际情况,统计出来了你和你同桌各自从11岁到30岁每年交的女(男)朋友的数量如列表a和b,请在一个图中绘制出该数据的折线图,以便比较自己和同桌20年间的差异,同时分析每年交女(男)朋友的数量走势。

          a = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]

          b = [1,0,3,1,2,2,3,3,2,1 ,2,1,1,1,1,1,1,1,1,1]

          要求:

          (1) y轴表示个数。

          (2) x轴表示岁数,比如11岁,12岁等。

          (3) 自定义绘制图形的风格。

          (4) 每条线添加图例。

    from matplotlib import pyplot as plt
    
    x = range(11,31)
    a = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
    b = [1,0,3,1,2,2,3,3,2,1 ,2,1,1,1,1,1,1,1,1,1]
    
    plt.figure(figsize=(20,15),dpi=80)
    plt.plot(x,a,label='')
    plt.plot(x,b,label='你的同桌')
    
    _xtick_labels = [i for i in range(11,31)]
    
    plt.xticks(_xtick_labels)
    plt.yticks(range(min(b),max(a)+1))
    plt.legend(bbox_to_anchor=(0., 1.02, 1., .102), loc=3,
           ncol=3, mode="None", borderaxespad=0.)
    
    plt.xlabel("岁数")
    plt.ylabel("个数")
    plt.title("11岁到30岁每年交的女(男)朋友的数量")
    plt.show()

  • 相关阅读:
    切片 Slice
    表单与v-model
    vue-内置指令
    go单元测试
    go异常处理
    设计模式
    django数据库事务
    go interface衍生的插件化处理
    goroutine
    drf之序列化
  • 原文地址:https://www.cnblogs.com/MurasameLory-chenyulong/p/14295387.html
Copyright © 2011-2022 走看看