zoukankan      html  css  js  c++  java
  • matplotlib学习笔记

    1. 数据分析介绍

    1.1 什么是数据分析:

    数据分析是用适当的方式对收集来的大量数据进行分析,帮助人们作出判断,以便采取适当行动。

    ​ 把大量的数据进行统计和整理,得出结论,为后续的决策提供数据支持。

    1.2 数据分析的流程

    2. matplotlib

    为什么要学习matplotlib

    1. 能将数据进行可视化,更直观的呈现。
    2. 使数据更加客观、更具说服力

    matplotlib安装:

    命令行:python -m pip install -U pip setuptools
    python -m pip install matplotlib

    2.1 什么是matplotlib

    matplotlib:最流行的Python底层绘图库,主要做数据可视化图表,名字取材于MATLAB,模仿MATLAB构建。

    2.2 matplotlib基本要点

    把坐标连成线,组成一个折线图。

    from matplotlib import pyplot as plt → 导入pyplot

    plt.plot(x,y) → 传入x和y,通过plot绘制出折线图

    plt.show() → 在执行程序时展示图形

    设置图片大小

    import matplotlib.pyplot as plt

    fit = plt.figure(figsize=(20,8),dpi=80)

    ​ →figure图形图标的意思,在这里指的是我们画的图

    ​ →通过实例化一个figure并且传递参数,能够在后台自动使用该figure实例

    ​ →在图像模糊的时候可以传入dpi参数,让图片更加清晰

    plt.savefig("./sig_size.png") → 保存图片

    ​ →可以保存为svg这种矢量图格式,放大不会有锯齿

    显示中文:

    • matplotlib.rc
    • font_manager
      • from matplotlib import font_manager
      • my_font = font_manager.FontPropertier(fname="")
      • 使用:要显示中文的地方添加fontproperties=my_font
        图例中使用prop=my_font来接收
    	from matplotlib import pyplot as plt
        from matplotlib import font_manager
        
        # 解决显示中文的问题
        my_font = font_manager.FontPropertier(fname="字体路径")
    
        x = range(2,26,2)
        y = [15,13,14.5,17,20,25,26,26,27,22,18,15]
    
        #设置图片大小
        plt.figure(figsize=(20,8),dpi=80)
    
        # 绘图
        plt.plot(x,y)
    
        # 设置x轴的刻度
        # 间隔为2
        # plt.xticks(range(2,25,2))
        # 间隔为1.5
        # 当刻度太密集时候使用列表的步长(间隔取值)来解决
        _xtick_labels = [i/2 for i in range(4,49)]
        plt.xticks(_xtick_labels[::3])
        
        # 绘制网格
        plt.grid(alpha=0.1) #alpha表示透明度
        
        # 添加描述信息
        plt.xlable("横坐标")
        plt.ylable("纵坐标")
        plt.title("标题")
    
        # 保存
        #plt.savefig("./testo1.png")
    
        # 展示图形
        plt.show()
    
    

    plt.xticks(x[::5],_x_ticks[::5],rotation=90)
    →两数组长度必须一样,否则不能完全覆盖整个轴
    →rotation选项,让字符串旋转90°显示

    自定义绘制图像的风格:

    在绘制的时候指定即可:

    • color=‘r', #线条颜色
    • linestyle=’--‘,# 线条风格
    • linewidth=5, # 线条粗细
    • alpha=0.5,# 透明度

    from matplotlib import pyplot as plt
    
    def huitu():
        y_1 = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1];
        y_2 = [1,0,3,1,2,2,3,3,2,1,2,1,1,1,1,1,1,1,1,1];
    
        x = range(11,31)
    
        #设置图片大小
        plt.figure(figsize=(20,8),dpi=80)
    
        # 绘图
        plt.plot(x,y_1,label="my",color="orange",linestyle=':')
        plt.plot(x,y_2,label="you",colir="cyan",linestyle="--")
    
        # 设置x轴的刻度
        _xtick_labels = [ x]
        plt.xticks(x,_xtick_labels)
    
        # 绘制网格
        plt.grid(alpha=0.4)
    
        # 展示图形
        plt.show()
    
        return None
    
    if __name__ == "__main__":
        huitu()
    

    总结:前面做了什么:

    1. 绘制了折线图(plt.plot)
    2. 设置图片的大小和分辨率(plt.figure)
    3. 实现了图片的保存(plt.savefig)
    4. 设置了xy轴上的刻度和字符串(xticks)
    5. 解决了刻度稀疏和密集的问题(xticks)
    6. 设置了标题,xy轴的lable(title,xlable,ylable)
    7. 设置了字体(font,manager,fontProperties,matplotilb.rc)
    8. 在一个图上绘制多个图形(plt多次plot即可)
    9. 为不同的图形添加图例

    以上统统很重要

    画其他图形的话,去看matplotlib官方文档

    2.3 matplotlib的散点图、直方图、柱状图

    2.3.1 对比常用统计图

    折线图:以折现的上升或下降来表示统计数量的增减变化的统计图
    特点: 能够显示数据的变化趋势,反映事物的变化情况。(变化)

    直方图:由一系列不等的纵向条纹或线段表示数据分布的情况。
    一般用横轴表示数据范围,纵轴表示分布情况。
    特点:绘制连续性的数据,展示一组或者多组数据的分布情况(统计

    条形图:排列在工作表的列或行中的数据可以绘制到条形图中。
    特点:绘制离散的数据,能够一眼看出各个数据的大小,比较数据之间的差别。(统计

    散点图:用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或总结坐标点的分布模式。
    特点:判断变量之间是否存在数量关联趋势,展示离群点(分布规律

    2.3.2 matplotlib绘制散点图

    plt.scatter(x,y)

    from matplotlib import pyplot as plt
    from matplotlib import font_manager
    
    def test02():
        """
        使用scatter方法绘制散点图
        :return:
        """
        my_font = font_manager.FontProperties(fname="C:\Windows\Fonts\方正粗黑宋简体.ttf")
        y_3 = [11,17,16,11,12,11,12,6,6,7,8,9,12,15,14,17,18,21,16,17,20,14,15,15,15,19,21,22,22,22,23]
        y_10 = [26,26,28,19,21,17,16,19,18,20,20,19,22,23,17,20,21,20,22,15,11,15,5,13,17,10,11,13,12,13,6]
    
        x_3 = range(1,32)
        x_10 = range(51,82)
    
        # 设置图形大小
        plt.figure(figsize=(20,8),dpi=80)
    
        plt.scatter(x_3,y_3,label="3月份")
        plt.scatter(x_10,y_10,label="10月份")
    
        #调整x轴的刻度
        _x = list(x_3)+list(x_10)
        _xtick_labels = ["3月{}日".format(i) for i in x_3]
        _xtick_labels += ["10月{}日".format(i-50) for i in x_10]
    
        plt.xticks(_x[::3],_xtick_labels[::3],fontproperties=my_font,rotation=45)
    
        # 添加图例
        plt.legend(loc="upper left",prop=my_font)
    
        # 添加描述信息
        plt.xlabel("时间",fontproperties=my_font)
        plt.ylabel("温度",fontproperties=my_font)
    
        # 展示
        plt.show()
        return None
    
    if __name__ == "__main__":
        test02()
    
    

    散点图的更多应用场景

    • 不同条件(维度)之间的内在关联关系
    • 观察数据的离散聚合程度

    2.3.3 matplotlib绘制条形图

    plt.bar(x,y)

    from matplotlib import pyplot as plt
    from matplotlib import font_manager
    
    def test03():
        """
        使用bar方法绘制条形图
        :return:
        """
        my_font = font_manager.FontProperties(fname="C:\Windows\Fonts\方正粗黑宋简体.ttf")
    
        a = ["战狼2","速度与激情8","功夫瑜伽","西游伏妖篇","变形金刚5","摔跤吧!爸爸","加勒比海盗5"]
        b = [56.01,26.94,17.53,16.49,15.45,12.96,11.8]
    
        # 设置图形大小
        plt.figure(figsize=(20, 8), dpi=80)
    
        # 绘制条形图
        # plt.bar(range(len(a)),b)
    
        #绘制横着的条形图
        plt.barh(range(len(a)),b,height=0.3,color="orange")
    
        # 设置字符串到x轴
        plt.yticks(range(len(a)),a,fontproperties=my_font,rotation=45)
    
        plt.grid(alpha=0.3)
    
        # 展示
        plt.show()
        return None
    
    if __name__ == "__main__":
        test03()
    
    

    条形图的更多应用场景

    • 数量统计
    • 频率统计(市场饱和度)

    2.3.4 matplotlib绘制直方图

    把数据分多少组进行统计???
    组数要适当,太少会有较大的统计误差,大多规律不明显

    一般来说,能够使用plt.hist方法的是那些没有统计过的数据。

    plt.hist(a,num_bins) 
    #	→ 传入需要统计的数据,以及组数即可
    
    #plt.hist(a,[min(a)+i*bin_width for i in range(num_bins)])
    #   → 可以传入一个列表,长度为组数,值为分组依据,当组距不均匀时使用
    
    #plt.hist(a,num_bins,normed=1)
    #  normed:bool 是否绘制频率分布直方图,默认为频数直方图
    
    from matplotlib import pyplot as plt
    from matplotlib import font_manager
    
    def test04():
        """
        使用 hist方法绘制直方图
        :return:
        """
        my_font = font_manager.FontProperties(fname="C:\Windows\Fonts\方正粗黑宋简体.ttf")
    
        a = [131,98,125,131,124,139,131,117,128,108]
    
        #计算数组
        d = 5 # 组距
        num_bins=(max(a)-min(a))//d + 1   # 组数
    
        # 设置图形大小
        plt.figure(figsize=(20,8),dpi=80)
        # 绘制直方图,第二个参数为组数
        plt.hist(a,num_bins)
    
        # 设置x轴的刻度
        plt.xticks(range(min(a),max(a)+d),d)
    
        # 展示
        plt.show()
        return None
    
    if __name__ == "__main__":
        test04()
    
    

    直方图更多应用场景

    • 用户年龄分布状态
    • 一段时间内用户点击次数的分布状态
    • 用户活跃时间的分布状态

    matplotlib常见问题总结

    1. 应该选择那种图形来呈现数据
    2. matplotlib.plot(x,y)
    3. matplotlib.bar(x,y)
    4. matplotlib.scatter(x,y)
    5. matplotlib.hist(data,bins,normed)
    6. xticks和yticks的设置
    7. label和title,grid的设置
    8. 绘图的大小和保存图片

    2.4 更多的画图工具

    matplotlib支持的图形是非常多的,如果有其他的需求,我们可以查看一下URL地址:http://matplotlib.org/gallery/index.html

    前端框架:echarts、plotly

  • 相关阅读:
    [MFC]CImageList仅显示黑色的问题
    [hessdroid]Android下使用Hessian与Java服务端通讯的传值测试
    [MFC]Sqlite问题小记
    [MFC] FTP 遍历服务器目录文件卡住的问题
    ExtJs 备忘录(9)—— Ext常用属性、方法小结 [系列完]
    [MFC]托盘图标删除后不自动消失的问题
    RIL接听电话没有声音的问题 [ RIL_Answer | RIL_SetAudioDevices ]
    [Qt]Qt Creator汉化方法
    [C++]遍历可变参数 (va_list)
    [杀毒]删除U盘autorun.inf
  • 原文地址:https://www.cnblogs.com/l999q/p/12329236.html
Copyright © 2011-2022 走看看