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

posted @ 2020-02-18 22:48  19呀  阅读(341)  评论(0编辑  收藏  举报